これは単純化されたコードです:コンストラクタ、グラムでの初期化子リストと異なる行動++と打ち鳴らす
#include <vector>
class VInitList
{
public:
explicit VInitList(std::vector<int> v){}
};
int main()
{
VInitList vil({{}});
}
とg ++ 5.2.1でコンパイルし、このエラーを取得:
error: call of overloaded ‘VInitList(<brace-enclosed initializer list>)’ is ambiguous
VInitList vil({{}});
^
main.cpp:6:5: note: candidate: VInitList::VInitList(std::vector<int>)
VInitList(std::vector<int> v){}
^
main.cpp:3:7: note: candidate: constexpr VInitList::VInitList(const VInitList&)
class VInitList
^
main.cpp:3:7: note: candidate: constexpr VInitList::VInitList(VInitList&&)
私が見ましたコンパイラのエラー{{}}
を誤って書いたことがわかりましたが(私には意味がありません)、まだエラーを理解することはできません。 IMHOでは、コンパイラは余分な{}を取り除くか、構文エラーを返さなければなりません。意図したとおりに動作します
std::vector<int> v = {{{}}};
:
は、その後、私はこれをコンパイルしようとしました。
私はあなたの例を見ていましたが、コードスニペットでコンパイルした余分なペアがあります。 – Henningsson
g ++ 5.2.1ではコンパイルされませんが、Clang 3.7.0で行われます – FrankS101
面白い質問あなたのシナリオでは、両方の場合で単一の '{}'で十分です。含まれる型は 'int'です、なぜ複雑ですか? :-) – iammilind