あなたのコード サンプルは不完全です。完全な例を提供できると便利です。書かれたコードの問題は、あなたが欠けていることです
#include <initializer_list>
#include <vector>
#include <iostream>
...そしてinitializer_list
namespaceにあるため、コンストラクター宣言からstd
a も欠落しています。std::
ただし、これらのどちらも問題ではないと主張しているため、最も可能性の高い原因は、C++ 標準ライブラリの実装が提供していないことstd::initializer_list
です。これは、Clang が GCC の libstdc++ を使用していて、その適切な新しいバージョンがインストールされていない場合に当てはまります。少なくともバージョン 4.4が必要ですが、libstdc++-4.4 のバグを修正するにはパッチが必要であることに注意してください。 C++11 モードの Clang で動作します。そうしないと、エラーtype_info
やその他のさまざまな問題が発生します。
また、あなたが受けた診断結果は次のとおりです。
initializer_list.cpp:12:23: error: expected ')'
S(initializer_list<T> l) : v(l) {
^
(提供された列番号からキャレットを再構築しました。将来の質問でそれを保持すると便利です。)上記の説明のいずれについても、これは Clang が生成する最初の診断ではありません。それは次のようなものです:
initializer_list.cpp:12:5: error: no template named 'initializer_list'; did you mean 'std::initializer_list'?
S(initializer_list<T> l) : v(l) {
^~~~~~~~~~~~~~~~
std::initializer_list
したがって、質問から最初の診断を逃したか、問題は、質問で省略したコードで名前が付けられた他の(非template
) タイプを宣言していて、それが隠れていることです。コードの残りの部分または診断の残りの部分を確認しないと、どちらを判断することはできません。initializer_list
std::initializer_list