Według cppreference następujący kod jest legalny:Czy C++ zezwala na normalne parametry po parametrach szablonu variadic?
lock_guard(MutexTypes&... m, std::adopt_lock_t t);
Jednakże po kod nie może zostać skompilowany z brzękiem 3,8 (-std = C++ 1Z)
template<typename... Args>
void f(Args&&..., bool)
{}
int main()
{
f(1, 2, 3, true); // error! see below for details.
}
1>main.cpp(59,2): error : no matching function for call to 'f' 1> f(1, 2, 3, true); 1> ^ 1> main.cpp(54,6) : note: candidate function not viable: requires 1 argument, but 4 were provided 1> void f(Args&&..., bool) 1> ^ 1> 1 error generated.
Czy C++ zezwala na normalne parametry po parametrach wariancji?
Mój kompilator to clang 3.8. gcc 6.2 również się nie powiedzie. – xmllmx
Należy zauważyć, że z przykładem 'lock_guard' jest to konstruktor klasy, więc wszystkie argumenty szablonu są znane wcześniej, zamiast próbować wywnioskować je z argumentów wywołania funkcji. – BoBTFish
To jest C++ 17, a nie C++ 11. – ForEveR