I did a simple test as follow:
#include <iostream>
template <typename T, std::size_t N, std::size_t D> struct MyArray {
template <typename First, typename ... Rest> MyArray(First, Rest...);
int dimension[N];
T m_array[D];
};
template <typename First, typename... Rest> MyArray(First first, Rest... values)
-> MyArray<First, 1 + sizeof...(values), (values * ...)>;
int main()
{
MyArray arr{3, 2, 3};
return 0;
}
The compiler complains about it:
main.cpp:14:13: No viable constructor or deduction guide for deduction of template arguments of 'MyArray'
main.cpp:4:50: candidate template ignored: couldn't infer template argument 'T'
main.cpp:9:45: candidate template ignored: substitution failure [with First = int, Rest = <int, int>]: non-type template argument is not a constant expression
main.cpp:3:60: candidate function template not viable: requires 1 argument, but 3 were provided
If I replace (values * ...)
with 18 everything works as expected.
Is there any way to benefit from fold expressions in deduction guides in C++?