在以下上下文中,什麼是奇怪語言結構X< class Y > Y;
?在boost :: spirit :: x3中用作標籤的奇怪結構
#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;
}
它的目的和語義是什麼?
我會說它檢查'std :: ignore'的編譯時行爲。你從中得到了什麼樣的背景? –
我什至不是。你的問題是什麼? –
我的問題是關於'X < class Y > const Y;'。 – Orient