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

Является ли этот допустимый синтаксис С++ 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 с агрегатами и старым синтаксисом инициализации фигурных скобок для них. Почему это невозможно? Стандартом это запрещено? Или виноваты компиляторы? Или это упущение? Я не вижу серьезных проблем в разрешении этого в качестве альтернативы явному вызову конструктора.


person rubenvb    schedule 07.07.2011    source источник


Ответы (1)


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

person Johannes Schaub - litb    schedule 07.07.2011
comment
Очень интересно. Но так как я только сегодня сообщил об ошибке в GCC, связанной с инициализацией, которая все еще существует в 4.7, и поскольку обновление с 4.6.0 до 4.6.1 исправило другую, не связанную с этим ошибку инициализации, я счастлив поверить, что GCC просто не еще разобрался. - person Kerrek SB; 07.07.2011
comment
Бам, вот почему я люблю SO.com за такие вещи. - person rubenvb; 07.07.2011