错误:在 ubuntu 中构建 c++ 项目时“is_same”不是“std”的成员?

错误:在 ubuntu 中构建 c++ 项目时“is_same”不是“std”的成员?

我有一个小项目并且出现错误‘is_same’ 不是 ‘std’ 的成员当建造时。这是一些代码:

template <class T>
T* UcmExportFactory::Unwrap (T* ptr)
{
    Utils::IUcmWrapper* wrapper = dynamic_cast<Utils::IUcmWrapper*> (ptr);

    // If the requested Ucm inteface is derived from an another (such as IUcmV from IUcmUnionValue), specify that whether we want the base class pointer or not.
    bool interfaceForAbstractBase = (std::is_same<IUcmUnionValue, T>::value || std::is_same<IUcmDiagCodedType, T>::value);
    return (wrapper) ? boost::any_cast<T*> ( wrapper->GetWrappedObject (interfaceForAbstractBase) ) : ptr;
}

任何人都可以帮助我。我包括了标题#include <type_traits>。谢谢。

答案1

std::is_same是 C++11 的一个特性。Ubuntu 12.04 有 GCC 4.6.3,它只有不完整的C++0x(尚未实现 C++11)支持。您可以尝试指定以下标准:

g++ --std=c++0x ...

答案2

只是提醒所有访问此页面的人,正如 OP 所述,他这样做了:

如果不包含标题type_traits,您也会收到此错误,因此不要忘记:

#include <type_traits>

相关内容