C ++ 0x: зачем запрещать "braced-init-list" в "operator []"? - PullRequest
2 голосов
/ 18 июля 2011

Я только что заметил, что в N3291 помечено изменение ( 5.2.1 Подписка [expr.sub] ):

Раньше было нормально перегрузить operator[] с помощьюnew braced-init-list :

struct X {
    Z operator[](std::initializer_list<int>);
};
X x;
x[{1,2,3}] = 7; // OK: meaning x.operator[]({1,2,3})

Теперь, когда удалено и заменено на:

A braced-init-Список не должен использоваться со встроенным оператором индекса.

В чем проблема?

Ответы [ 2 ]

9 голосов
/ 18 июля 2011

x[{1,2,3}] не является встроенным оператором []. Он вызывает пользовательскую функцию оператора. Так что сделайте глубокий вдох и продолжайте использовать этот забавный синтаксис.

2 голосов
/ 18 июля 2011

осторожный поиск в Google указал мне на выпуск 798 , они только переместили на 13.5.5 [over.sub] , а не удалены это.

...