以下代码(MWE)在 gcc 4.5.3 及更高版本中编译,但在 VS 2008 和 2010 中无法编译。它是已知的 VS 编译器错误吗?func()
除了定义内联之外,还有其他解决方法吗?
enum DeviceState{ ON , OFF , BUSY , WAITING };
template<typename T>
struct Foo
{
typedef DeviceState State;
template<State S>
void func(); // no error if implementation is inline
};
template<typename T>
template<typename Foo<T>::State>
void Foo<T>::func()
{
}
int main()
{
Foo<Bar> f;
f.func<ON>();
}
VS 错误信息
error C2244: 'Foo<T>::func' : unable to match function definition to an existing declaration
definition
'void Foo<T>::func(void)'
existing declarations
'void Foo<T>::func(void)'
编辑:这似乎是我报告的早期问题的另一个版本。