#include <iostream>
#include <utility>
#include <type_traits>

namespace Ckb
{

struct Version
{
	enum { Major = 1, Minor = 0, Release = 0 };
	void CheckDependencies()
	{
		std::cout << "Ckb Check" << std::endl;
	}
};

}  // namespace Ckb

namespace Cg
{

struct Version { enum { Major = 1, Minor = 8, Release = 1 }; };

}  // namespace Cg

template <typename T, bool> struct RunCheck
{ void operator()() {std::cout << "false" << std::endl;} };

template <typename T> struct RunCheck<T, true>
{ void operator()() { std::cout << "true" << std::endl; } };

template <typename T> void Do()
{
	RunCheck<T, std::is_member_function_pointer<void(T::*)()>::value>()();
}

int main()
{
	Do<Cg::Version>();
	Do<Ckb::Version>();
	return 0;
}
