Java CRTP и Wildcards: код компилируется в Eclipse, но не `javac`

Извините за смутное название. У меня есть этот кусок кода, который компилируется в Eclipse Juno (4.2), но не javac (1.7.0_09):

package test;

public final class Test {
    public static class N<T extends N<T>> {}

    public static class R<T extends N<T>> {
        public T o;
    }

    public <T extends N<T>> void p(final T n) {}

    public void v(final R<?> r) {
        p(r.o);       // <-- javac fails on this line
    }
}

Ошибка:

Test.java:13: error: method p in class Test cannot be applied to given types;
        p(r.o);
        ^
  required: T
  found: N<CAP#1>
  reason: inferred type does not conform to declared bound(s)
    inferred: N<CAP#1>
    bound(s): N<N<CAP#1>>
  where T is a type-variable:
    T extends N<T> declared in method <T>p(T)
  where CAP#1 is a fresh type-variable:
    CAP#1 extends N<CAP#1> from capture of ?
1 error

Итак, вопросы:

Этоjavac ошибка или ошибка затмения?

Есть ли способ сделать эту компиляцию наjavacбез изменения подписиv метод (т. е. оставить шаблон)?

Я знаю, изменив это на<T extends N<T>> void v(final R<T> r) делает его компиляцией, но я хотел бы знать, есть ли способ избежать этого в первую очередь. Также методp нельзя изменить на<T extends N<?>> void p(final T n) потому что у контента есть типы, которые требуют точного ограниченияT extends N<T>.

Ответы на вопрос(1)

Ваш ответ на вопрос