Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:初始值设定项列表+;模板产生奇怪的错误_C++_Templates_Compiler Errors_Initializer List - Fatal编程技术网

C++ C++;:初始值设定项列表+;模板产生奇怪的错误

C++ C++;:初始值设定项列表+;模板产生奇怪的错误,c++,templates,compiler-errors,initializer-list,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 }); } }; 一旦我从Y中删除模板参数

考虑以下代码:

#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 });
    }

};

一旦我从
Y
中删除模板参数,即使其成为一个普通类,一切正常。我做错了什么,或者这是一个编译器错误?

这几乎肯定是一个编译器错误,因为它可以在以后的GCC版本中工作(请参阅注释)。我个人看不出它不起作用的原因。

似乎在GCC 4.7.1上起作用,但似乎在GCC 4.5.1上起作用。我猜,如果它在更高版本中工作时是这样的话,那就是一个bug。但这是一个非常奇怪的bug。从未使用模板参数。我不明白为什么模板化
Y
会对初始值设定项列表调用产生任何影响。GCC有一个Bug固定日志吗?@ GeXEng杀人,这就是C++和C++编译器的工作原理。只是想让你困惑。@gexicide,我用这个:。它工作得非常好,还包括其他有用的东西,如boost。@chris:迁移到此发行版的最佳方式是什么?先卸载旧版本,或者我可以简单地在旧版本上安装它吗?@gexicide,您使用哪种编译器?它带有指令,但对于代码块,我所要做的就是用这个重命名为那个来替换
MinGW
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*>&'