C# には concept-based overload は (多分) 存在しないみたいな話

んーと,C++0x は規格が決まってから見ればいいやと思ってあんまり規格を追いかけてないのですが,とりあえず C# 2.0/3.0 では次のような overload は許されてないです.

public static string Hey<T, U>(this IDictionary<T, U> dict)
    where U : IEnumerable<T>
{
    return "HauHau!";
}

// コンパイルエラー! Hey は既に定義されている
public static string Hey<T, U>(this IDictionary<T, U> dict)
    where T : IEnumerable<U>
{
    return "Foo!";
}

C# では,Generic method の制約は (現行の C++ と同じく) メソッドシグネチャに含まれないので,C++0x で言うところの concept-based overload は今の C# には無いような気がします.多分.