2016-04-28 4 views
1

У меня есть класс, который объявляет это публичный метод:C++ 11 инициализации равномерная не работает с "г ++ -std = C++ 0x"

virtual std::vector<float> operator()(const std::vector<float>& = {}); 

, который использует однородную инициализацию (здесь только {}) , функция C++ 11. Это не дает мне проблем при компиляции с clang++ -std=c++11. Но когда я использую g++ -std=c++0x я получаю это:

error: expected primary-expression before '{' token 

ли не -std=c++0x Предполпгпется Принеси мне C++ 11 поддержки?

компилятор не дает мне какие-либо ошибки при объявлении метода с использованием стандартного C++, как это:

virtual std::vector<float> operator()(const std::vector<float>& = std::vector<float>()); 

Я использую г ++ 4.6 на Ubuntu 12,04

+1

Не уверен, что вы запрашиваете 'std = C++ 0x' не поддержку C++ 11, это до-11, как было понято разработчиками gcc в день 4.6. Если вам нужен полный C++ 11, используйте '-std = C++ 11'. – SergeyA

+0

Похож на gcc-ошибку. он компилируется в 4.7.3 и выше: https://godbolt.org/g/gy9Kb5 – NathanOliver

+0

Теперь есть C++ 11/C++ 14, нет смысла использовать C++ 0x/C++ 1y. и как только C++ 17 выйдет из C++ 1z, тоже будет ненужным. – Jarod42

ответ

1

От GCC 4.7 release notes:

G++ now accepts the -std=c++11 , -std=gnu++11 , and -Wc++11-compat options, which are equivalent to -std=c++0x , -std=gnu++0x , and -Wc++0x-compat , respectively.

От C++11 in GCC project page:

GCC 4.8.1 was the first feature-complete implementation of the 2011 C++ standard, previously known as C++0x.


Плохие новости, вам необходимо обновить свой компилятор, чтобы получить поддержку C++ 11.

0

GCC 4.6 не поддерживает все C++ 11 особенности:

GCC provides experimental support for the upcoming ISO C++ standard, C++0x. This support can be enabled with the -std=c++0x.

Я предлагаю вам обновить до последней версии GCC, и компилировать с флагом -std=c++11 или даже -std=c++14