如果看下面的代码,我认为main()
中的两行应该调用initializer_list
的构造函数InitSomething
。正如我所料,gcc输出22
,但是clang只输出一个2
。铛是错的?Clang跳过初始化程序列表构造的处理
我在编译-std=c++14
。
#include <iostream>
struct InitSomething {
explicit InitSomething(int) { std::cout << '1'; }
InitSomething(std::initializer_list<int>) { std::cout << '2'; }
operator int() { return 1; }
};
int main() {
InitSomething init_something{1};
InitSomething init_something_else{init_something};
}
的clang++ --version
(我在Mac)的输出是
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
和g++ --version
我提到的其他平台上的输出
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
最近语言发生了变化,如果还有其他构造函数直接使用'some_value',则不会为**每个**集合{{some_value})支持initializer_list。 –
@BoPersson你指的是C++ 17吗? – Curious
我不确定它何时出现。寻找参考... –