Унифицированный инициализатор, используемый в аргументе по умолчанию для константной ссылки - PullRequest
5 голосов
/ 07 июля 2011

Это допустимый синтаксис 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 Ответ

7 голосов
/ 07 июля 2011

Это действительно в C ++ 11, но это было очень позднее добавление к рабочему документу, который пропустил Бьярне.Поэтому неудивительно, что GCC пока не поддерживает скобочные аргументы по умолчанию.

...