C++14 の Generic lambda を利用してローカルクラステンプレートぽい事をする
そういえば、Generic Lambda を利用すればローカルクラステンプレートみたいなことができるかなー、と思って書いてみた。
[ソース]
#include <utility> int main(){ auto identity_ = [](auto t){ typedef decltype(t) T; struct impl{ typedef T type; }; return impl{}; }; static_assert(std::is_same<decltype(identity_(std::declval<int>()))::type, int>{}, ""); static_assert(std::is_same<decltype(identity_(std::declval<float>()))::type, float>{}, ""); auto add_pointer_ = [](auto t){ typedef decltype(t) T; struct impl{ typedef T* type; }; return impl{}; }; static_assert(std::is_same<decltype(add_pointer_(std::declval<int>()))::type, int*>{}, ""); static_assert(std::is_same<decltype(add_pointer_(std::declval<float>()))::type, float*>{}, ""); return 0; }
http://melpon.org/wandbox/permlink/OLRaojX4dOaJjeKk
評価する場合は decltype が必要ではあるけど一応それっぽい事はできている感じですね。
何かに利用できるだろうか。