#include <iostream>
struct X {};
template<typename T>
struct Promise {};
template<typename T> constexpr bool isPromise = false;
template<typename T> constexpr bool isPromise<Promise<T>> = true;
int main()
{
std::cout << isPromise<int> << ' ' << isPromise<X> << std::endl;
std::cout << isPromise<Promise<int>> << ' ' << isPromise<Promise<X>> << std::endl;
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFgge307Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgUHJvbWlzZSB7fTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIGlzUHJvbWlzZSA9IGZhbHNlOwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBpc1Byb21pc2U8UHJvbWlzZTxUPj4gPSB0cnVlOwoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgaXNQcm9taXNlPGludD4gPDwgJyAnIDw8IGlzUHJvbWlzZTxYPiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgaXNQcm9taXNlPFByb21pc2U8aW50Pj4gPDwgJyAnIDw8IGlzUHJvbWlzZTxQcm9taXNlPFg+PiA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==