具有前向声明类型的函数模板特化

Function Template Specialization with Forward Declared Type

没能完全找到副本。

是否可以前向声明函数特化中使用的类型?

考虑以下代码:

在.h

template <typename T>
T* Foo()
{
    //generic implementation
}

template<>
class SpecialT* Foo<class SpecialT>();

in .cpp

#include "SpecialT.h"

template<>
SpecialT* Foo<SpecialT>()
{
    //specialized implementation
}

是否有任何语法可以实现上述内容并且不会导致大量编译器错误(C2910、C2909、C2768 等)?

如果 "SpecialT.h" 包含在模板头中,这当然可以编译。

简单的解决方法是将前向声明放在单独的行中:

class SpecialT;
template<>
SpecialT* Foo<SpecialT>();

VS 2015 on Godbolt接受就好了