Следующая проблема:
#include <iostream>
#include <array>
#include <type_traits>
using namespace std;
template <typename... Args>
inline constexpr size_t variadicElementCounter(Args... args)
{
return sizeof...(args); // get num of arguments in the parameter pack
}
template <typename DataType, size_t SizeValue>
class Sth
{
public:
Sth()=default;
~Sth()=default;
template<typename ... VariadicValues, std::enable_if_t<(variadicElementCounter(VariadicValues...)) == SizeValue> * = nullptr>
Sth(VariadicValues && ... f_values) noexcept : m_arr{ std::move(f_values) ...}
{
}
private:
std::array<DataType,SizeValue> m_arr;
};
int main()
{
// arr= {1,2,3};
Sth<int,3> something={1,2,3};
cout<<"Hello World";
return 0;
}
Пример можно выполнить здесь: https://onlinegdb.com/r1Qpj67BI
Попытка скомпилировать этот класс, VariadicValues...
(вероятно) нарушает компиляцию Что я делаю неправильно (потому что я хочу избежать вызова sizeof...(VariadicValues)
в выражении enable_if