Я считаю, что эта программа некорректна, диагностика не требуется.
[temp.point] / 8 читает, редактируя ненужные части:
Специализация для шаблона функции [...] может иметь несколько точек создания экземпляров в единице перевода и, в дополнение к описанным выше точкам создания экземпляров, для любой такой специализации, которая имеет точку создания в единице перевода,конец единицы перевода также считается точкой создания экземпляра.[...] Если две разные точки инстанцирования придают специализации шаблона разные значения в соответствии с правилом единого определения, программа некорректна, диагностика не требуется.
YeapImpl<X>
имеет дваточки инстанцирования: где он вызывается в строке комментария в вопросе и в конце блока перевода.В первом пункте реализации, X
является неполным, что сделало бы тело функции плохо сформированным.Во втором пункте реализации, X
завершена, что делает тело хорошо сформированным.
Эти две специализации имеют [очень] разные значения.