struct A { A(/* ... */) {} A(A const&) = delete; };
struct B { B(/* ... */) {} B(B const&) = delete; };
int main()
{
static bool constexpr cond = false;
[[maybe_unused]]
A a(/* ... */);
[[maybe_unused]]
B b(/* ... */);
std::conditional_t c = cond ? a : b;
return 0;
}
Это не компилируется, поскольку знак "?" Оператор требует, чтобы оба типа были конвертируемы друг в друга. Что мне (очевидно) нужно, так это то, чтобы c был a или b в зависимости от того, является ли cond истинным или ложным. Как мне этого добиться?
Вот чего я хочу достичь: [code]struct A { A(/* ... */) {} A(A const&) = delete; }; struct B { B(/* ... */) {} B(B const&) = delete; };
int main() { static bool constexpr cond = false;
[[maybe_unused]] A a(/* ... */); [[maybe_unused]] B b(/* ... */);
std::conditional_t c = cond ? a : b;
return 0; } [/code] Это не компилируется, поскольку знак "?" Оператор требует, чтобы оба типа были конвертируемы друг в друга. Что мне (очевидно) нужно, так это то, чтобы c был a или b в зависимости от того, является ли cond истинным или ложным. Как мне этого добиться?