Рассмотрим следующий пример:
#include <iostream>
#include <string>
struct foo { std::string value; };
inline foo bar() { return { "42" }; }
std::string my_func() {
auto &x = bar();
^^^^^^^^^^^^^^^^
return x.value;
}
int main() {
std::cout << my_func() << std::endl;
}
Компиляция как GCC, так и CLANG выдает, скорее всего, ту же ошибку:
ошибка: недопустимая инициализация неконстантной ссылки типа "foo&" из rvalue типа "foo"
Однако, к моему удивлению, он отлично компилируется и работает в VC++2015.
- Является ли это ошибкой VC++ 2015?
- Предписывает ли стандарт, что
auto
может неявно добавлятьconst
ness к объекту, когда оператор делает программу неправильно сформированной?