在clang中别名std :: initializer_list

时间:2017-03-23 07:58:47

标签: c++ c++11 clang clang++

我想使用别名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的行为是否符合标准?

1 个答案:

答案 0 :(得分:0)

答案:这是Jonas在评论中描述的LLVM中的一个已知错误。

https://bugs.llvm.org//show_bug.cgi?id=23689