Проверьте, существует ли метод шаблона, не полагаясь на автоматический вывод шаблона - PullRequest
2 голосов
/ 24 апреля 2019

Можно ли написать тестер, если определен шаблон-метод с заданной сигнатурой?

Метод имеет следующую подпись:

template<typename ReturnType>
ReturnType get(std::string) { return std::declval<ReturnType>(); }

Я искал здесь, но все, что я нашел, это механизм, основанный на автоматическом удержании шаблона (например, Как проверить, существует ли функция шаблона во время компиляции )

1 Ответ

4 голосов
/ 24 апреля 2019
#include <type_traits>
#include <string>

template <typename T>
constexpr bool test() { return is_invocable<decltype(get<T>), std::string>::value; }

См. std :: is_invocable . Однако test<T> по-прежнему не компилируется, если get<T> не компилируется; см. комментарии ниже.

...