c-クラス内メンバー初期化子がVS 2013で失敗する

次のコードをコンパイルすると予想していましたが、Visual Studio 2013 Update 2ではエラーが発生しますが、g 4.7では正常にコンパイルされます。

using std::vector;
using std::string;

struct Settings
{
    vector<string> allowable = { "-t", "--type", "-v", "--verbosity" };
};

VS 2013のコンパイルは次のように失敗します。

'std::vector<std::string,std::allocator<_Ty>>::vector' : no overloaded function takes 4 arguments

メンバーを次のように変更すると、正常にコンパイルされます。

vector<string> allowable = vector<string> { "-t", "--type", "-v", "--verbosity" };

BjarneのFAQからリンクされたproposalを見て、VS 2013で完成したC 11機能のMSDN pageを見てきましたが、まだ混乱しています。そのままコンパイルする必要がありますか、それとも間違っているのか、タイプを2回指定する必要がありますか?

ベストアンサー
>あなたが示した例は完全に有効なCですが、VC 2013では機能しません。
>これは、2013年10月31日以降に報告された既知のVC++2013 bugであり、そのステータスはまだアクティブです。
>ただし、回避策を講じることでそれを乗り越えることができます。 @ildjarnが示唆しているように、中括弧のペアを追加するだけで、initializer_list<>を強制できます。以下の例のように、フィルコンストラクターの代わりに呼び出されるstd :: vectorのコンストラクター:

   #include <string>
   #include <vector>
   #include <iostream>

   struct Settings {
     std::vector<std::string> allowable = {{"-t", "--type", "-v", "--verbosity"}};
   };

   int main() {
     Settings s;
     for (auto i : s.allowable) std::cout << i << " ";
     std::cout << std::endl;
   }

転載記事の出典を記入してください: c-クラス内メンバー初期化子がVS 2013で失敗する - コードログ