Я хочу сделать модульный тест, чтобы проверить (и узнать, как работает разрешение функций), для перегрузки функций, которые принимают lvalue вместо ссылки const lvalue для примитивных типов в некоторых математических функциях, вызывается хорошая функция.Я не нашел никакого обычного паттерна об этом.
struct A {/* ... */};
A f(A) {} // #1
A&& f(A&&) {} // #2
// Or some very complicated template overloading
int main() {
f(A()); // call #2 ; How to get it ?
}
// I want to have:
// typeid(f).name();
Возможно ли получить typeid(f)
из context
во время компиляции?(как жалуется gcc s)
"Псевдокод":
std::cout << typeid(f with args A()).name() << std::endl
// >> "A&& f(A&&)" (#2)
Только с компилятором typeid(f)
(gcc 7.3.0 на Ubuntu x64)
/home/xyzz/project/tests/RunTests.cpp:22: erreur : overloaded function with no contextual type information
typeid(tst).name();
^~~
При typeid(f())
он возвращает возвращаемый тип
Предлагаемый ответ: std::result_of
.Параметры шаблона не перестраиваются, но мы можем получить тип функции.