C++11 で boost::mpl::identity

元々は std::identity として標準ライブラリに入る予定だったんですが、残念ながら削除されてしまいました
と、いうことで現行の仕様だと std::common_type で代替出来ると聞いたのでやってみました。

[ソース]

#include <type_traits>
#include <iostream>

char
func(int n){
    return char(n);
}

int
main(){
    std::common_type<char(*)(int)>::type p[3] = { func, func, func };

    std::cout << p[0](72) << std::endl;
    std::cout << p[1](73) << std::endl;
    std::cout << p[2](74) << std::endl;

    return 0;
}

[出力]

H
I
J


使う機会は限られていると思いますが、覚えておいて損はないかなーと。
あと std::conditional とかでも可。

[コンパイラ]

  • g++ (GCC) 4.8.0 20120415 (experimental)
  • clang++ (LLVM) 3.2 20120514(trunk)