規格的にヤバそうな限定type_hashメタ関数を作ったけどGCCで動かないし、別の実装とかも考えたけどそれもダメくさいしもうだめだ

再帰深度を抑えたtuple的コンテナの構築 - ここは匣
コレの最後の部分を逆に動かしたら指定された方だけに対応するhash関数が作れるのではとか考えてみた

VSとClangでは動いたというのに。2対1だけど規格的にどっちが正しいのかわからない
間違ってる気さえする


コード
http://melpon.org/wandbox/permlink/dI2Ei7FNlqHyHiur
type_hase

ちなみにVSでは違う値が出力される(少ない値のほうが出力される)
つまり値は実装依存

仮にこのコードが動いた場合はsortなどに使える
型はコンパイル時に比較できない(type_infoは非constexpr)ため自由にソートするのが難しかったが、これが動けば何かと便利だろう



どうしても動かない場合たぶんこんな実装になる

struct Base
{
	std::integral_constant<int, 1> f(double){ return{}; }
};
struct Base2
{
	std::integral_constant<int, 2> f(int){return{};}
};

struct D:Base,Base2
{
	using Base::f;	
	using Base2::f;
	std::integral_constant<int, 0> f(double){ return{}; }
};

int main()
{
	D d;
	using R=decltype(d.f(3.14));
	std::cout<<R::value;
	using i=decltype(d.f(1));
	std::cout<<i::value;
}

当初考えてた対数tupleの実装の流用。そしてこれもだめくさい。baseとbase2が同じレベルで同じ型を持ってた場合動かない

一旦typeにuniqueかけて値を割り当て、というのも考えたけどそれよりこっちのほうが効率がいい気がする。unique関数は決して軽くない。むしろunique関数の実装にsortしたいくらいだ