У меня есть программа, как это:VARIADIC шаблон вычет используя псевдоним типа
template<typename ...Args>
using Function = void(*)(Args *...);
template<typename ...Args>
void DoThing(Function<Args...> func) { }
void IntFunction(int *i) { }
int main(int argc, char *argv[]) {
DoThing(IntFunction);
}
Когда я запускаю программу, я получаю эту ошибку
$ clang++ -std=c++14 template.cpp
template.cpp:12:3: error: no matching function for call to 'DoThing'
DoThing(IntFunction);
^~~~~~~
template.cpp:7:6: note: candidate template ignored: substitution failure [with Args = int]
void DoThing(Function<Args...> func) { }
^
1 error generated.
Но если я скомпилировать его с помощью г ++ Я не получить какие-либо ошибки.
Похоже, что clang испытывает проблемы с выводом параметров вариационного шаблона при использовании в псевдониме типа. Если заменить переменные параметры на стандартные, то я больше не получаю ошибку.
Какой компилятор дает мне правильный результат? И почему мне не разрешат это делать?
Код выглядит хорошо для меня. [Компиляция с gcc] (http://rextester.com/OIOL58947) и с VC2015. Похож на проблему с clang. –