Унифицированный инициализатор, используемый в аргументе по умолчанию для константной ссылки
Это законный синтаксис C++0x?
class A
{
public:
void some_function( const std::set<std::string> &options = {} );
// note that this is legal, which binds the const reference to a temporary:
void some_function( const std::set<std::string> &options = std::set<std::string>() );
}
Потому что если так, я только что нашел ошибку в GCC 4.6.
Я получаю ошибку:
ошибка: ожидаемое первичное выражение до токена '{'
что... логично... если это было незаконно.
ОБНОВЛЕНИЕ: Как иллюстрирует @Kerrek, это приводит к простому C++03 с агрегатами и старым синтаксисом инициализации скобок для них. Почему это невозможно? Это запрещено в Стандарте? Или виноваты компиляторы? Или это недосмотр? Я не вижу серьезных проблем в том, чтобы разрешить это как альтернативу явному вызову конструктора.
1 ответ
Решение
Это действительно в C++11, но это было очень позднее добавление к рабочему документу, который Бьярн пропустил. Поэтому неудивительно, что GCC пока не поддерживает скобочные аргументы по умолчанию.