When using std::conditional_t inside a class/struct with one of the conditional types being `decltype([]{})`, the type is wrong.
https://godbolt.org/z/3jhfcKav4 ``` #include <cstdint> #include <concepts> #include <type_traits> template <bool Condition = true, std::size_t Size = 32> using test_alias = std::conditional_t<Condition, uint32_t[Size], decltype([] {})>; template <bool Condition = true, std::size_t Size = 32> using test_alias3 = std::conditional_t<Condition, uint32_t[Size], float>; template <bool Condition = true, std::size_t Size = 32> class aboba { public: using test_alias2 = std::conditional_t<Condition, uint32_t[Size], decltype([] {})>; static_assert(std::same_as<test_alias3<Condition, Size>, uint32_t[32]>); static_assert(std::same_as<test_alias<Condition, Size>, uint32_t[32]>); test_alias<true, Size> a; test_alias2 b; std::conditional_t<Condition, uint32_t[Size], decltype([] {})> c; test_alias3<true, Size> d; }; aboba test{}; int main() { using a_t = decltype(test.a); using b_t = decltype(test.b); using c_t = decltype(test.c); using d_t = decltype(test.d); static_assert(std::same_as<test_alias<true, 32>, uint32_t[32]>); static_assert(std::same_as<b_t, uint32_t[32]>); static_assert(std::same_as<c_t, uint32_t[32]>); static_assert(std::same_as<d_t, uint32_t[32]>); static_assert(std::same_as<a_t, uint32_t[32]>); return 0; } ``` ``` Compiler returned: 1 Compiler stderr <source>:19:24: error: template argument 1 is invalid 19 | static_assert(std::same_as<test_alias<Condition, Size>, uint32_t[32]>); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <source>: In function 'int main()': <source>:37:24: error: static assertion failed 37 | static_assert(std::same_as<a_t, uint32_t[32]>); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ <source>:37:24: note: constraints not satisfied In file included from <source>:2: /opt/compiler-explorer/gcc-13.1.0/include/c++/13.1.0/concepts:57:15: required for the satisfaction of '__same_as<_Tp, _Up>' [with _Tp = int; _Up = unsigned int[32]] /opt/compiler-explorer/gcc-13.1.0/include/c++/13.1.0/concepts:57:32: note: the expression 'is_same_v<_Tp, _Up> [with _Tp = int; _Up = unsigned int[32]]' evaluated to 'false' 57 | concept __same_as = std::is_same_v<_Tp, _Up>; | ```