转换运算符无法在Visual Studio 2013中编译,但可以使用gcc成功编译

时间:2018-07-31 21:34:16

标签: c++ visual-c++ visual-studio-2013 compiler-errors msvc12

以下代码可使用gcc成功编译,但无法在Visual Studio 2013中编译:

#include <memory>
#include <iostream>

using namespace std;

template <typename T>
class MyClass {
public:
    MyClass(T* ptr) : m_ptr(ptr) {}

    // All of the errors are caused by this conversion operator:
    // =========================================================
    template <typename U>
    operator typename std::shared_ptr<U>() const & {
        return m_ptr;
    }
    //==========================================================

private:
    shared_ptr<T> m_ptr;
};

int main(int argc, char* argv[]) {
    MyClass<int> c(new int(42));

    shared_ptr<int> ptr = c;
    cout << *ptr << endl;
}

我相当确定这是VS2013编译器中的错误,因为它确实在较新版本的Visual Studio中进行编译,但是问题是我在哪里工作,我们只能使用VS2013。让他们切换编译器是不可能的。 (我们必须使用与提供我们软件的供应商所使用的编译器相同的编译器,并且他们使用VS2013。)

以下列出了错误:

Error   1   error C2143: syntax error : missing ';' before '&'  
Error   2   error C2238: unexpected token(s) preceding ';'  
Error   3   error C2988: unrecognizable template declaration/definition 
Error   4   error C2059: syntax error : '<end Parse>'   
Error   5   error C2334: unexpected token(s) preceding ':'; skipping apparent 
Error   6   error C1004: unexpected end-of-file found   

我的问题是,即使受到VS2013的限制,是否有任何变通办法可以使此代码编译并成功运行?

0 个答案:

没有答案