gpt4 book ai didi

c++ - clang 中的别名 std::initializer_list

转载 作者:可可西里 更新时间:2023-11-01 17:59:57 25 4
gpt4 key购买 nike

我想使用 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 & 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.24.0.0 的所有版本的 clang,并得到了相同的结果。 clang 的行为是否符合标准?

最佳答案

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

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

关于c++ - clang 中的别名 std::initializer_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42970229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com