マクロフリーの健全なテストライブラリをちょっと作ってみた

マクロは邪悪であり害悪である
故にマクロは滅びなければならない
滅ぼさなければならない。存在してはならない。これは人間の義務である

頭の中でワンワンと神が嘶くのでマクロフリーなテストライブラリもどきを作っていた

gist
マクロ無しの健全なテストライブラリ
wandbox
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

使い方
http://melpon.org/wandbox/permlink/wohs9rxnp79ba9UO

struct test1
	:test::TestCase<test1>
{
	void test()
	{
		check(3 / 2 == 1);
		std::cout << "Test1";
	}
};
struct test2
	:test::TestCase<test2>
{
	void test()
	{
		check(true);
		std::cout << "Test2";
	}
};


int main()
{
	for (auto c:test::Test::getList())
	{
		c();
	}
}

そこら辺に書き殴ったTest1とTest2がなんやかんやでTest内のstaticなListに投げられる
その「なんやかんや」の部分を実装してみた

問題点は呼び出すテストにfilterかけたり、テストしない方法がないこと

TestCase<test2,is_tested<test2>::value>

のようにユーザーにメタ関数を作ってもらって不必要な場合は何もしないのが健全であろうか


最初これをライブラリ側でやろうと思ったのだが
is_testedをTestXに対して特殊化する場合はTestXより前に特殊化がされてないといけないわけで、いろいろつらいのであきらめた。つらい