2

考虑以下代码:

#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,即使其成为普通类,一切正常。我在做什么错还是这是一个编译器错误?

4

1 回答 1

1

这几乎肯定是一个编译器错误,因为它可以在更高版本的 GCC 中工作(见注释)。我个人认为它不应该工作的原因。

于 2012-09-10T20:03:24.287 回答