Здравствуйте, Chorkov, Вы писали:
C>Я бы использовал auto — параметр шаблона:
C>C>template <auto Size>
C>struct omg {
C> static_assert(( std::is_convertible_v<decltype(Size), std::optional<std::size_t> > ));
C> static constexpr std::optional<std::size_t> size={Size}; // используем так, как хотели бы использовать параметр шаблона.
C> //...
C>};
C>omg<123> a;
C>omg<std::nullopt> b;
C>
Даже лучше предыдущего reply-я с вариадиком, т:к таких параметров может быть несколько.
Переделал на концепт:
#include <cstddef>
#include <type_traits>
#include <optional>
template <typename T, typename ... U>
concept c_any_of = (std::is_same_v<T, U> || ...);
template <c_any_of<std::size_t, std::nullopt_t> auto Size>
struct omg {};
int main() {
omg<std::nullopt> var1;
omg<10zu> var2;
return 0;
}