Четыре компилятора, четыре ответа
struct A { using T = T1; using U = U1; operator U1 T1::*(); operator U1 T2::*(); operator U2 T1::*(); operator U2 T2::*(); }; inline auto which(U1 T1::*) { return "gcc"; } inline auto which(U1 T2::*) { return "icc"; } inline auto which(U2 T1::*) { return "msvc"; } inline auto which(U2 T2::*) { return "clang"; } int main() { A a; using T = T2; using U = U2; puts(which(a.operator U T::*())); }
На изображении показан фрагмент кода C++, где структура A перегружает четыре оператора преобразования, а функция which возвращает названия GCC, ICC, MSVC или Clang. В main вызывается неоднозначное выражение, поведение которого различается в четырёх компиляторах; шутка об абсурдной сложности C++ и нежелании разбираться, какой вариант считается правильным. EN: The image shows a C++ code fragment where struct A overloads four conversion operators, while the which function returns the names GCC, ICC, MSVC, or Clang. An ambiguous expression is called in main, producing different behavior in four compilers; the joke is about the absurd complexity of C++ and not wanting to figure out which interpretation is correct.
- @ithueti / 3565 2021-01-19
- Type
- image
- Size
- 764×589 · 33.5 KiB
- Mood
- саркастичный, абсурдный
- Added