VS错误引用class-local typedef作为非内联模板参数

时间:2013-06-17 15:58:22

标签: c++ visual-studio templates

以下位code(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)'

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

0 个答案:

没有答案