Proposed resolution (January, 2016): Add the following bullet following 7.7 [expr.const]
bulllet 2.3: A conditional-expression e is a core constant
expression unless the evaluation of e , following the
rules of the abstract machine (6.10.1 [intro.execution]),
would evaluate one of the following expressions: ... an invocation of an undefined constexpr function or an
undefined constexpr constructor; an invocation of an instantiated constexpr
function or constexpr constructor that fails to
satisfy the requirements for a constexpr function or
constexpr constructor
(9.2.6 [dcl.constexpr]); ...
[Adopted at the February, 2016 meeting.] According to 9.2.6 [dcl.constexpr] paragraph 6, The restriction on appearing in a constant expression assumes the
previous wording that made such a specialization non- constexpr ,
and a call to a non- constexpr function cannot appear in a
constant expression. With the current wording, however, there is no
normative restriction against calls to such specializations.
7.7 [expr.const] should be updated to include such a
prohibition.
If the instantiated template specialization of a constexpr
function template or member function of a class template would fail to
satisfy the requirements for a constexpr function
or constexpr constructor, that specialization is still
a constexpr function or constexpr constructor, even
though a call to such a function cannot appear in a constant expression.