#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKbmFtZXNwYWNlIENrYgp7CgpzdHJ1Y3QgVmVyc2lvbgp7CgllbnVtIHsgTWFqb3IgPSAxLCBNaW5vciA9IDAsIFJlbGVhc2UgPSAwIH07Cgl2b2lkIENoZWNrRGVwZW5kZW5jaWVzKCkKCXsKCQlzdGQ6OmNvdXQgPDwgIkNrYiBDaGVjayIgPDwgc3RkOjplbmRsOwoJfQp9OwoKfSAgLy8gbmFtZXNwYWNlIENrYgoKbmFtZXNwYWNlIENnCnsKCnN0cnVjdCBWZXJzaW9uIHsgZW51bSB7IE1ham9yID0gMSwgTWlub3IgPSA4LCBSZWxlYXNlID0gMSB9OyB9OwoKfSAgLy8gbmFtZXNwYWNlIENnCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbD4gc3RydWN0IFJ1bkNoZWNrCnsgdm9pZCBvcGVyYXRvcigpKCkge3N0ZDo6Y291dCA8PCAiZmFsc2UiIDw8IHN0ZDo6ZW5kbDt9IH07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFJ1bkNoZWNrPFQsIHRydWU+Cnsgdm9pZCBvcGVyYXRvcigpKCkgeyBzdGQ6OmNvdXQgPDwgInRydWUiIDw8IHN0ZDo6ZW5kbDsgfSB9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgRG8oKQp7CglSdW5DaGVjazxULCBzdGQ6OmlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyPHZvaWQoVDo6KikoKT46OnZhbHVlPigpKCk7Cn0KCmludCBtYWluKCkKewoJRG88Q2c6OlZlcnNpb24+KCk7CglEbzxDa2I6OlZlcnNpb24+KCk7CglyZXR1cm4gMDsKfQo=