#include <iostream>
using namespace std;

template <class, int, class=void> struct is_complete : std::false_type {};
template <class T, int i>
struct is_complete<T, i, decltype(void(sizeof(T)))> : std::true_type {};

#define IS_COMPLETE(...) is_complete<__VA_ARGS__, __COUNTER__>::value	

struct A;
struct Foo {};
int main() {
	
	IS_COMPLETE(A);
	static_assert(IS_COMPLETE(Foo), "Type is not defined!");

	return 0;
}

struct A
{
	
};


void func()
{
	static_assert(IS_COMPLETE(Foo), "Type is not defined!");
}