0

以下代码(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)'

编辑:这似乎是我报告的早期问题的另一个版本。

4

0 回答 0