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;
}
その目的とセマンティクスは何ですか?