C++ 14 Изменена формулировка для контекстных преобразований
#include <cassert>
template<typename T>
class zero_init
{
T val;
public:
zero_init() : val(static_cast<T>(0)) { }
zero_init(T val) : val(val) { }
operator T&() { return val; }
operator T() const { return val; }
};
int main()
{
zero_init<int> i; assert(i == 0);
i = 7; assert(i == 7);
switch(i) { } // error until C++14 (more than one conversion function)
// OK since C++14 (both functions convert to the same type int)
switch(i + 0) { } // always okay (implicit conversion)
}
Есть такой код статья С++14 по адресу:
Почему тут до С++14 пишет ошибку?
switch(i) { } // error until C++14 (more than one conversion function)
Что значит комментарий more than one conversion function? Что две функции конвертирования и компилятор не знает какую выбрать? Почему?
И тут не понятно почему i + 0 пишется - что бы у выражения не было адреса?
switch(i + 0) { } // always okay (implicit conversion)