Por que 'std :: vector <int> b {2};' criar um vetor de 1 elemento e não um de 2 elementos?

Eu brinco com o C ++ 11 nos últimos dias e criei algo estranho.

Se quiser inicializar uniformemente um int:

int a{5};

Mas se eu fizer a mesma coisa com um std :: vector:

std::vector<int> b{2};

Não constrói uma matriz de dois elementos, mas uma matriz com um elemento de valor dois. Parece que, para conseguir esse efeito, seria preciso ser mais explícito:

std::vector<int> c{{2}};
std::vector<int> d = {2};

Mas não como a declaração de b - isso parece inconsistente. Eu já vi outras coisas com o mesmo efeito. O que estou perguntando - esse comportamento está no padrão final do C ++ 11 ou apenas em um rascunho que foi implementado anteriormente? Em caso afirmativo, por que o comitê de padrões incluiu esse comportamento? Parece que isso derrota todo o propósito da inicialização uniforme, pois é preciso lembrar quais classes têm construtores de lista de inicializadores e usar a sintaxe old () em vez de {} apenas com essas classes. Ou alguém renuncia completamente à inicialização uniform

Isto parece um grande problema. Mas pode haver vantagens que eu não conheço.

Edit: este código:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> a{2};
    for (auto x: a) {
        std::cout << x << std::endl;
    }
    return 0;
}

saídas "2" no gcc 4.6.2

questionAnswers(6)

yourAnswerToTheQuestion