考慮下面的代碼:C++:初始化列表+模板收率奇怪的錯誤
#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 });
}
};
與單個nullptr
類模板Y<T>
呼叫X::init
與初始化值列表的功能foo
。應該工作正常,不是嗎?
然而,我的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
刪除模板參數,即讓一個普通的類,一切工作正常。我在做什麼錯了,或者這是一個編譯器錯誤?
在GCC 4.7.1上似乎[work](http://liveworkspace.org/code/bfab5d5ff6a33911b50b4bf1f8f1fd4d)。 – chris
但在GCC 4.5.1上似乎[不工作](http://ideone.com/MzzS9)。 – orlp
我猜這是一個錯誤,如果它的工作方式與更高版本。 – chris