#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;
}
