On Oct 20, 2012, at 20:23 , Richard Smith <rich...@metafoo.co.uk> wrote:

> On Sat, Oct 20, 2012 at 7:36 PM, Gabriel Dos Reis
> <g...@integrable-solutions.net> wrote:
>> On Sat, Oct 20, 2012 at 2:24 PM, Jordan Rose <jordan_r...@apple.com> wrote:
>>> While throwing things out there, why not just optionally allow constexpr 
>>> functions to coexist with non-constexpr functions of the same name, like 
>>> inline and non-inline?
> 
> I think this is fundamentally the wrong approach. Constexpr functions
> aren't a different kind of function, they're just functions for which
> are sometimes required to be evaluated at translation time. Hence
> overload resolution should not depend on whether a function is
> constexpr. Also, this approach tends to require two definitions of
> constexpr functions even where the definitions are the same (if one
> calls a constexpr overload and the other calls a non-constexpr
> overload). What we want is just a mechanism to make function
> invocation substitution take a different path if it encounters a
> function which it can't process (because the runtime form of that
> function is somehow written in a way that it can't handle).

Just to clarify, I had assumed that if the constexpr function is the only 
visible declaration, it would be used as the runtime implementation as well, as 
it currently is in C++11. I guess in C++11 you can forward-declare a constexpr 
function without making it constexpr, though, so it's not backwards-compatible.

Jordan

Reply via email to