C ++:初始化列表+模板产生奇怪的错误

时间:2012-09-10 19:58:20

标签: c++ templates compiler-errors initializer-list

请考虑以下代码:

#include <initializer_list>

struct X{
    static void init(const std::initializer_list<void*>& ptrs){}
};

template <typename T>
struct Y{   

    static void foo(){
        X::init({ nullptr });
    }

};

类模板foo的函数Y<T>使用带有单个X::init的初始化列表调用nullptr。应该工作正常,不应该吗?

然而,我的g ++ 4.6.1抱怨:

test11.cpp: In static member function 'static void Y<T>::foo()':
test11.cpp:12:23: error: no matching function for call to 'X::init(<brace-enclosed initializer list>&)'
test11.cpp:12:23: note: candidate is:
test11.cpp:5:15: note: static void X::init(const std::initializer_list<void*>&)
test11.cpp:5:15: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const std::initializer_list<void*>&'

Y中删除模板参数后,即将其设为普通类,一切正常。我做错了什么或者这是编译错误?

1 个答案:

答案 0 :(得分:1)

这几乎肯定是编译器错误,因为它可以在更高版本的GCC中运行(请参阅注释)。我个人认为它不应该起作用的原因。