Рассмотрим минимальный пример:Зачем мне нужен составной литерал как временная конструкция для инициализации моего элемента std :: array?
#include <array>
struct X {
std::array<int,2> a;
X(int i, int j) : a(std::array<int,2>{{i,j}}) {}
// ^^^^^^^^^^^^^^^^^^ ^
};
Согласно other posts я не должен иметь явно построить временное в этой ситуации. Я должен быть в состоянии написать:
X(int i, int j) : a{{i,j}} {}
но и несколько других (подобных) версии я попробовал все отказались от меня (правда, довольно старая) г ++ 4.5.2. У меня в настоящее время есть только один для экспериментов. Он говорит:
error: could not convert ‘{{i, j}}’ to ‘std::array<int, 2ul>’
Является ли это ограничение реализации данного компилятора или что происходит?
Это не соединение буквальным; У C++ их даже нет! –
Да, ваш устаревший GCC - проблема - [отлично работает с 4.7.1] (http://liveworkspace.org/code/af413b3d9b062ea32cd3dd7b3e3aff33). – ildjarn
Я предположил, что он говорит о многохарактерных литералах, но в этом вопросе тоже нет. –