#include #include "test.hpp" #define MATRIX(M, N) \ CHECK((metal::is_invocable COMMA(N) VALUES(N)>), (BOOL(!N))); \ CHECK((metal::is_invocable COMMA(N) NUMBERS(N)>), (BOOL(!N))); \ CHECK((metal::is_invocable COMMA(N) PAIRS(N)>), (TRUE)); \ CHECK((metal::is_invocable COMMA(N) LISTS(N)>), (BOOL(!N))); \ CHECK((metal::is_invocable COMMA(N) MAPS(N)>), (BOOL(!N))); \ CHECK((metal::is_invocable COMMA(N) LAMBDAS(N)>), (BOOL(!N))); \ CHECK((metal::is_invocable, PAIR(M) COMMA(N) PAIRS(N)>), (BOOL(M >= N))); \ CHECK((metal::is_invocable, VALUE(M)>), (FALSE)); \ CHECK((metal::is_invocable, NUMBER(M)>), (FALSE)); \ CHECK((metal::is_invocable, PAIR(M)>), (FALSE)); \ CHECK((metal::is_invocable, LIST(M)>), (BOOL(!M))); \ CHECK((metal::is_invocable, MAP(M)>), (TRUE)); \ CHECK((metal::is_invocable, LAMBDA(M)>), (FALSE)); \ CHECK((metal::is_invocable, LAMBDA(_)>), (FALSE)); \ CHECK((metal::is_map), (FALSE)); \ CHECK((metal::is_map), (FALSE)); \ CHECK((metal::is_map), (FALSE)); \ CHECK((metal::is_map), (BOOL(!N))); \ CHECK((metal::is_map), (TRUE)); \ CHECK((metal::is_map), (FALSE)); \ CHECK((metal::is_map), (FALSE)); \ CHECK((metal::is_map>), (BOOL(N >= M))); \ /**/ GEN(MATRIX)