Это следующий вопрос более раннего вопроса о том, почему я не могу использовать инициализатор, заключенный в фигурные скобки, в качестве аргумента operator+
, который был разрешен посмотрев этот более ранний вопрос по этому вопросу.
Рассмотрим следующий код на С++, который вы можете попробовать жить на ideone.com:
#include <iostream>
#include <initializer_list>
using namespace std;
struct AddInitializerList {
void operator+= (initializer_list<int> values) {
// Do nothing
}
void operator+ (initializer_list<int> values) {
// Do nothing
}
};
int main() {
AddInitializerList adder;
adder += {1, 2, 3}; // Totally legit
adder + {1, 2, 3}; // Not okay!
return 0;
}
Строка в main
, которая использует operator+
с вложенным в скобки списком инициализаторов, не компилируется (и, задав этот вопрос раньше, я теперь знаю, почему это так). Однако я смущен, почему код, который использует opeartor+=
в main
, действительно компилируется просто отлично.
Я смущен точно, почему я могу перегрузить +=
и работать с ним нормально, в то время как перегрузка +
здесь не работает. Существует ли конкретное положение в стандарте, которое допускает инициализаторы, заключенные в скобки, в контексте оператора +=
, но не оператора +
? Или это просто странный компилятор причуды?