Можно ли использовать static_assert
в сочетании с псевдонимом шаблона? Я понимаю, как использовать SFINAE с псевдонимом шаблона и как использовать static_assert
с struct
, но я хочу, чтобы static_assert
с псевдонимом выдавал более понятное сообщение об ошибке.
Я имею в виду следующий вариант использования:
#include <array>
constexpr bool is_valid(int n){
return n <= 10;
}
template <int n>
struct Foo {
static_assert(is_valid(n), "This class cannot handle more than 10 dimensions");
};
template <int n>
using Bar = std::array<float,n>;
template <int n, std::enable_if_t<is_valid(n)> * unused = nullptr>
using BarSFINAE = std::array<float,n>;
int main() {
Foo<5>();
// Foo<20>(); // Triggers the compiler-time static_assert
Bar<5>();
Bar<20>(); // TODO: Should trigger a compiler-time static_assert
BarSFINAE<5>();
// BarSFINAE<20>(); // Not allowed due to SFINAE, but throws an ugly compile time message
}
Проблема в том, что у псевдонима нет тела. Поэтому я не знаю, куда бы я положил static_assert