【发布时间】:2017-01-27 22:55:30
【问题描述】:
我试图在 Visual Studio 2012 中编译一个库,该库最初是用 C++ 为 Visual Studio 2015 编写的。我有一个错误提示 'class' missing tag。
显示编译错误的类的代码。
template <class T>
class construct
{
public:
template <class ... Args>
void operator()( Args && ... args );
T * operator->()
{
if( !itsValid )
throw Exception("Object must be initialized prior to accessing members");
return itsPtr;
}
T * ptr()
{
return operator->();
}
private:
template <class A, class B> friend struct ::cereal::memory_detail::LoadAndConstructLoadWrapper;
construct( T * p ) : itsPtr( p ), itsValid( false ) {}
construct( construct const & ) = delete;
construct & operator=( construct const & ) = delete;
T * itsPtr;
bool itsValid;
};
由于 C++ 编译器版本不同,可能会出现此问题。 Visual Studio 2012 使用 C++0x,Visual Studio 2015 使用 C++11。
非常感谢任何关于如何编译 Visual Studio 2012 的建议。
【问题讨论】:
-
C++11 的实现非常参差不齐,在 VS2012 中几乎无法使用,在 VS2013 中处于边缘地位。一般来说,向后移植 C++11 代码是一项 Sysiphean 任务。 This question/answer 可能会有所帮助。
标签: c++ visual-studio c++11