https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85069
Bug ID: 85069 Summary: std::invoke_result returns a wrong type Product: gcc Version: 8.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: akrzemi1 at gmail dot com Target Milestone: --- `std::invoke_result` returns a wrong type. Consider the following source file: ``` #include <type_traits> // log_type displays the type of T in compiler error template <typename T> void log_type() = delete; struct F { int operator()() { return 9; } }; int main() { log_type<std::invoke_result_t<F()>>(); } ``` I do not expect it to compile, but when generating error message it displays the "return type" from the type trait. I expect the type of `std::invoke_result_t<F()>` to be `int`, but instead, the compiler reports that it is `F`. I do not get this problem when I use the deprecated trait `std::result_of` instead.