#include <type_traits>
#include <iostream>
#include <iomanip>
#define NOQUAL_DECLTYPE(x) std::remove_cv_t<std::remove_reference_t<decltype((x))>>
int main(void) {
std::cout << std::boolalpha << std::is_same<char, NOQUAL_DECLTYPE('a')>::value << "\n";
std::cout << std::boolalpha << std::is_same<int, NOQUAL_DECLTYPE('ab')>::value << "\n";
std::cout << std::boolalpha << std::is_same<int, NOQUAL_DECLTYPE(42)>::value << "\n";
std::cout << std::boolalpha << std::is_same<char[4], NOQUAL_DECLTYPE("abc")>::value << "\n";
std::string s = "abc";
std::cout << std::boolalpha << std::is_same<std::string, NOQUAL_DECLTYPE(s)>::value << "\n";
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgoKI2RlZmluZSBOT1FVQUxfREVDTFRZUEUoeCkgc3RkOjpyZW1vdmVfY3ZfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxkZWNsdHlwZSgoeCkpPj4KIAppbnQgbWFpbih2b2lkKSB7CglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgc3RkOjppc19zYW1lPGNoYXIsIE5PUVVBTF9ERUNMVFlQRSgnYScpPjo6dmFsdWUgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYSA8PCBzdGQ6OmlzX3NhbWU8aW50LCBOT1FVQUxfREVDTFRZUEUoJ2FiJyk+Ojp2YWx1ZSA8PCAiXG4iOwoJc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8IHN0ZDo6aXNfc2FtZTxpbnQsIE5PUVVBTF9ERUNMVFlQRSg0Mik+Ojp2YWx1ZSA8PCAiXG4iOwoJc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8IHN0ZDo6aXNfc2FtZTxjaGFyWzRdLCBOT1FVQUxfREVDTFRZUEUoImFiYyIpPjo6dmFsdWUgPDwgIlxuIjsKCXN0ZDo6c3RyaW5nIHMgPSAiYWJjIjsKCXN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYSA8PCBzdGQ6OmlzX3NhbWU8c3RkOjpzdHJpbmcsIE5PUVVBTF9ERUNMVFlQRShzKT46OnZhbHVlIDw8ICJcbiI7Cn0=