我想使用别名std::initializer_list
代替自己:
#include<initializer_list>
template< typename T >
using InitializerList = std::initializer_list<T>;
// note: candidate template ignored: couldn't infer template argument 'T'
template< typename T >
void f(InitializerList<T> list) {
}
int main() {
// error: no matching function for call to 'f'
f({1, 2, 3, 4, 5});
}
使用gcc&amp; amp; CL。但是,使用clang我收到错误:
<source>:11:3: error: no matching function for call to 'f'
f({1, 2, 3, 4, 5});
^
<source>:7:6: note: candidate template ignored: couldn't infer template argument 'T'
void f(InitializerList<T> list) {
^
1 error generated.
但直接使用std::initializer_list
编译没有错误。
#include<initializer_list>
template< typename T >
void f(std::initializer_list<T> list) {
}
int main() {
f({1, 2, 3, 4, 5});
}
我尝试了从 3.4.2 到 4.0.0 的所有版本的clang并得到了相同的结果。 clang的行为是否符合标准?