Declaring a function in your code is acceptable, but deduction does not work properly for such function templates. Note that the following code is well-formed and creates the specialization void f(int, int, int, bool) :
template<typename... Args> void f(Args&&..., bool) {} int main() { f<int, int, int>(1, 2, 3, true); }
Note that in C ++ 17, MutexTypes... are template parameters for the class itself:
template <class... MutexTypes> class lock_guard;
therefore, they are known and do not need to be deduced. Please note that the constructor with adopt_lock_t cannot be used to output the C ++ 17 class template argument, since the adopt_lock_t argument occurs after the parameter package. If the committee were predictable in C ++ 11, they would put adopt_lock_t at the beginning, not the end, but, alas, it's too late.
Brian
source share