template <class ... =“”args =“”> void operator()(Args&amp;&amp; ... args)显示编译错误&#34; Class&#34;缺少标签

时间:2017-01-27 22:55:30

标签: c++ visual-studio c++11

我正在尝试在visual studio 2012中编译一个库,该库最初是为c ++中的visual studio 2015编写的。我有一个错误说&#39; class&#39;遗失标签

错误消息的屏幕截图 enter image description here

显示编译错误的类的代码。

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的建议都非常感谢。

1 个答案:

答案 0 :(得分:3)

您遇到的错误最像是在代码中使用可变参数模板的结果:http://en.cppreference.com/w/cpp/language/parameter_pack

MSDN之旅表明他们首次出现在VS 2013中:https://msdn.microsoft.com/en-us/library/dn439779(v=vs.120).aspx

如果您不得不删除语言结构以降级编译器,那么您需要进行长时间的设置。