Он предложил here реализовать в следующем виде:собственная реализация станд :: is_function
template<class Ret, class... Args>
struct is_function<Ret(Args...)const> : std::true_type {};
template<class Ret, class... Args>
struct is_function<Ret(Args...)volatile> : std::true_type {};
Но это действительный синтаксис функции? Visual Studio 2013 выдает ошибку:
error C2270: 'abstract declarator' : modifiers not allowed on nonmember functions
Вы пробовали код в онлайн-компиляторе, который использует gcc/clang? VS2013 имеет проблемы с вариативными шаблонами. Возможно, что ваш код верен и что ошибка находится в компиляторе. – Borgleader
@Borgleader Я проверил его на IdeOne.com, и вы были правы, это проблема VS. Но все же есть ли какой-нибудь пример функции с такой подписью? Почему 'const' и' volatile' могут быть помещены в функции, не являющиеся членами? –