Это CWG 2356 . Похоже, что и gcc, и clang уже реализуют это (clang 4.0+ отвергает его), несмотря на то, что он все еще "предварительно готов" и еще не принят в рабочий проект. даже думал, что он только что был принят в рабочий проект в Рапперсвиле в прошлом месяце через P1114 .
Правило таково:
Конструктор, унаследованный от типа класса C
(15.6.3 [class.inhctor.init]), который имеет первый параметр типа «ссылка на cv1 P
» (включая такой конструктор создается из шаблона) исключается из набора функций-кандидатов при создании объекта типа cv2 D
, если список аргументов имеет ровно один аргумент, а C
связан со ссылками на P
и P
относится к D
.
Это исключает конструктор копирования Base
из рассмотрения (в нашем случае C
и P
оба B
, а B
связан со ссылкой D
), поэтому оба компилятора отклоняют ваш код.