C++14 でローカルクラスを返す関数

C++14 だとこんな愉快な事ができるのかーと思って書いてみた。

[ソース]

#include <iostream>

template<typename T, typename U>
constexpr auto
make_person(T name, U age){
    struct person{
        T name;
        U age;
    };
    return person{ name, age };
}

int
main(){
    constexpr auto homu = make_person("homu", 14);
    static_assert(homu.age == 14, "");
    std::cout << homu.name << std::endl;
    return 0;
}

[出力]

homu


型名が一箇所しか出てこないですね。
C++03 の時代からは考えられないような書き方。
こうなってくるとトップレベルで無名クラスを定義したくなってくる。

template<typename T, typename U>
constexpr auto
make_person(T name, U age){
    return struct{
        T name;
        U age;
    }{ name, age };
}


こんな感じ(さすがにキモすぎるだろうか。