【一人 C++20 Advent Calendar 2019】std::result_of が削除される【20日目】
一人 C++20 Advent Calendar 2019 20日目の記事になります。
std::result_of が削除される
C++11 で追加され、C++17 で非推奨になっていた std::result_of
が削除されます。
変わりに今後は std::invoke_result
を使用する事が推奨されます。
#include <type_traits> struct plus{ template<typename T> auto operator ()(T a, T b) { return a + b; } }; int main(){ // C++20 ではエラー static_assert(std::is_same_v<std::result_of<plus(int, int)>::type, int>); static_assert(std::is_same_v<std::result_of<plus(float, float)>::type, float>); // C++20 では std::invoke_result を使用する static_assert(std::is_same_v<std::invoke_result<plus, int, int>::type, int>); static_assert(std::is_same_v<std::invoke_result<plus, float, float>::type, float>); return 0; }
result_of
は boost
を使っていた時代からお世話になっていたので削除されるのは感慨深いものがありますねえ。
std::invoke_result
といった今時のメタ関数は全然把握していたので C++20 とかで遊ぶ場合はどのメタ関数を使えばいいのかわからなくて苦労しそう。