0

X< class Y > Y;次のコンテキストでの奇妙な言語構造は何ですか?

#include <iostream>
#include <sstream>
#include <typeinfo>
#include <type_traits>
#include <cstdlib>
#include <cxxabi.h>

template< typename T >
std::string const type_info_str()
{
    int status = 0;
    auto realname_(abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status));
    switch (status) {
    case -1: return "Could not allocate memory";
    case -2: return "Invalid name under the C++ ABI mangling rules";
    case -3: return "Invalid argument to demangle";
    }
    std::ostringstream oss;
    if (std::is_volatile< T >::value) {
        oss << "volatile ";
    }
    oss << realname_;
    std::free(realname_);
    if (std::is_const< T >::value) {
        oss << " const";
    }
    if (std::is_rvalue_reference< T >::value) {
        oss << " &&";
    } else if (std::is_lvalue_reference< T >::value) {
        oss << " &";
    }
    return oss.str();
}

template< typename T >
struct X { };

int main()
{
    X< class Y > Y;
    std::cout << type_info_str< decltype(Y) >() << std::endl; // X<main::Y>
    return EXIT_SUCCESS;
}

その目的とセマンティクスは何ですか?

4

1 に答える 1