初期化子リストの型はinitializer_list

C++0xでは、初期化子リストの型はstd::initializer_listになります。

#include <type_traits>
#include <initializer_list>

using namespace std;

int main()
{
    auto a = {1, 2, 3};

    typedef decltype(a)           left;
    typedef initializer_list<int> right;

    static_assert(is_same<left, right>::value, "not same"); // OK
}

ただし、配列の初期化の場合には従来どおりTの配列になります。


ちなみに、autoを配列にすることはできません。

auto a[] = {1, 2, 3}; // エラー!