以下代码段可以在C ++ 11/14/17标准下使用GCC 9.1和Clang 6.0很好地进行编译,但是拒绝使用Visual Studio 2019进行编译。我可以将getDummies()
的返回值更改为{{ 1}}和VS将使用C ++ 14/17标准进行编译,但这会破坏所有编译器的C ++ 11兼容性,这是我需要保持的。
auto
答案 0 :(得分:1)
在类内部定义Dummy
函数时,类getDummies()
尚未完全定义。
您可以在类中声明该函数,然后在类外对其进行定义,例如:
template<typename T>
class Dummy
{
public:
static std::pair<Dummy<int>, Dummy<int>> getDummies();
};
template<typename T>
std::pair<Dummy<int>, Dummy<int>> Dummy<T>::getDummies()
{
return std::make_pair(Dummy<int>{}, Dummy<int>{});
}