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