В настоящее время в C++
ни то, ни другое невозможно, компилятор жалуется, что ожидает выражение.
Для меня это тривиально, если вы создаете объект типа кортежа с переменным c количество типов, как проверить, являются ли все эти типы nothrow
default
/ move
/ copy
constructible
?
Это похоже на досадный дефект языка для меня.
Есть ли альтернативы?
#include <iostream>
#include <type_traits>
template <typename... TYPES>
struct Test1 {
Test1()
noexcept(... && (std::is_nothrow_default_constructible_v<TYPES>)) {}
};
template <typename... TYPES>
struct Test2 {
Test2()
noexcept(std::conjunction_v<std::is_nothrow_default_constructible<TYPES>, ...>) {}
};
int
main() {
Test1<int, int, int> test1;
Test2<int, int, int> test2;
return 0;
}