Процитированный вами отрывок на самом деле не предотвращает наследование конструкторов копирования в C ++ 14. Вместо этого рассмотрите следующее:
B(B const&, int = 42) {}
Это конструктор копирования, но он имеет два параметра. Отрывок исключает только конструктор копирования с одним параметром. И когда вы указываете оба аргумента, вы можете фактически инициализировать объект D
с помощью этого конструктора.
g++
сообщения об ошибках дают некоторое представление.
note: an inherited constructor is not a candidate for initialization from an expression of the same or derived type
Ага! Быстрый поиск в черновом стандарте находит this
Конструктор, унаследованный от типа класса C ( class.inhctor.init ), который имеет первый параметр типа «ссылка на cv1 P » (включая такой конструктор, созданный из шаблона) исключается из набора функций-кандидатов при построении объекта типа cv2 D , если аргумент list имеет ровно один аргумент, и C связано со ссылкой на P , а P связано со ссылкой на D.