This is a consequence of section 13.4.2 of the C # 4 specification, which states:
If any possible constructed type created from C, after the type arguments are replaced by L, causes the identity of the two interfaces in L, then the declaration of C is invalid. Constraint declarations are not taken into account when defining all possible constructed types.
Please note that the second sentence is there.
Therefore, this is not a compiler error; the compiler is right. It can be argued that this is a flaw in the language specification.
Generally speaking, restrictions are ignored in almost every situation in which a fact about a generic type must be inferred. Constraints are mainly used to define an effective base class of a type parameter parameter and a little different.
Unfortunately, this sometimes leads to situations where the language is unnecessarily strict, as you have discovered.
In general, a bad code smell implements the "same" interface twice, in a sense differing only in arguments of a general type. It is bizarre, for example, to have class C : IEnumerable<Turtle>, IEnumerable<Giraffe> - what is C, that it is both a sequence of turtles and a sequence of giraffes at the same time? Can you describe what you are trying to do here? Perhaps there will be a better model to solve the real problem.
If in fact your interface is exactly the same as you describe:
interface IFoo<T> { void Handle(T t); }
Then multiple interface inheritance is another problem. You can reasonably decide to make this interface contravariant:
interface IFoo<in T> { void Handle(T t); }
Now suppose you have
interface IABC {} interface IDEF {} interface IABCDEF : IABC, IDEF {}
and
class Danger : IFoo<IABC>, IFoo<IDEF> { void IFoo<IABC>.Handle(IABC x) {} void IFoo<IDEF>.Handle(IDEF x) {} }
And now everything is getting really crazy ...
IFoo<IABCDEF> crazy = new Danger(); crazy.Handle(null);
What implementation of Handle is called ???
See this article and comments for more thoughts on this issue:
http://blogs.msdn.com/b/ericlippert/archive/2007/11/09/covariance-and-contravariance-in-c-part-ten-dealing-with-ambiguity.aspx