#include <iostream>
using namespace std;

struct Z { };
template<class> struct Y { };

template<template <class> class... T>
struct X
{
#if defined(__clang__)
	static const constexpr size_t count = sizeof...(T); // Clang
#elif defined(_MSC_VER)
	static const           size_t count = sizeof...(T); // MSVC 2013 - same as Clang
#elif defined(__GNUC__)
	static const constexpr size_t count = sizeof...(T<Z>); // GCC (can be any valid template argument)
#endif
};

int main()
{
	// should output 0 and 2
	cout << X<>::count << endl;
    cout << X<Y,Y>::count << endl;
	return 0;
}
