меня родился такой квиз:
Что выведет эта программа?
#include <type_traits>
#include <iostream>
std::true_type is_const(int const &) { return {}; }
std::false_type is_const(int &) { return {}; }
int main() {
int x = 0;
[y = x, x] {
std::cout << std::boolalpha
<< is_const(x).value << '\n'
<< is_const(y).value << '\n'
<< decltype(is_const(x))::value << '\n'
<< decltype(is_const(y))::value << '\n'
<< std::is_const_v<decltype(x)> << '\n'
<< std::is_const_v<decltype(y)> << '\n'
;
} ();
}
Подсказка: Clang, GCC и MSVC выдают разные ответы.
Логически объяснить (по крайней мере на моем уровне знаний), можно только результат MSVC.
http://eel.is/c++draft/expr.prim.id.unqual#2
Там в тикете https://bugs.llvm.org//show_bug.cgi?id=38325#c1 ответил Ричард и расписал что как должно быть. Если в кратце: у всех компиляторов поведение неверное :) Чуть позже заведу багу на GCC
Обсуждают сегодня