Visual C ++中的模板非类型成员函数指针参数推导错误

时间:2013-01-04 00:07:56

标签: c++ templates visual-c++

请考虑以下代码:

class Foo {
public:
    void foo() {}
    void foo(double d) {}
};


template <typename Fun>
void bar_simple(Fun fun) {}

template <typename Base>
struct Wrapper {
    template <typename Type>
    static void bar(Type Base::* fun) {}
};

template <typename Type, typename Base>
void bar(Type Base::* fun) {}


int main() {
    //ok
    bar_simple<void(Foo::*)()>(&Foo::foo);
    bar_simple<void(Foo::*)(double)>(&Foo::foo);

    //ok
    Wrapper<Foo>::bar<void()>(&Foo::foo);
    Wrapper<Foo>::bar<void(double)>(&Foo::foo);

    //yields: error C2784: 'void bar(Type Base::* )' : 
    //could not deduce template argument for 'overloaded function type' 
    //from 'overloaded function type'; see declaration of 'bar'
    bar<void()>(&Foo::foo);
    bar<void(double)>(&Foo::foo);

    return 0;
}

上面的代码在gcc-4.3.4和comeau 4.3.10.1上编译,在Visual C ++ 9.0和10.0上都失败了。 这似乎是一个bug;你知道MS的“bug跟踪器”中是否存在适当的错误报告?

0 个答案:

没有答案