Посмотрите на этот простой пример:
template <typename T>
const T const_create() {
return T();
}
struct Foo { };
int main() {
auto &x = const_create<Foo>(); // compiles
// auto &x = const_create<int>(); // doesn't compile
}
Почему версия с Foo
компилируется, а с int
нет?Другими словами, почему const
удаляется из типа возврата const_create<int>
?Это работает как если бы он вернул int
, а не const int
.Разве это не противоречие в языке?
Где стандарт предписывает такое поведение?