0

以下代码使用 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 的限制,是否有任何解决方法可以让此代码成功编译和运行?

4

0 回答 0