Uninstantiated default argument handling issue
Douglas Gregor
dgregor at apple.com
Sun Nov 16 16:15:24 PST 2014
Sent from my iPhone
> On Nov 8, 2014, at 1:21 AM, Abramo Bagnara <abramo.bagnara at bugseng.com> wrote:
>
>
> template<typename T> void f2(T a, T b = T()) { }
>
> void m() {
> f2(10);
> f2(10);
> f2(10);
> f2(10);
> }
>
> Checking the AST generated for the source above I've seen that the
> default argument expression is not instantiated in specialization of
> function f2, but instead such transformation is done (and redone) in the
> calls to f2.
>
> In this way:
>
> - we have dependent expr in the declaration of fully instantiated
> functions (that is unexpected, at least for me)
>
> - we have multiple copies of the same expression (one for each call)
>
> Is this deliberate?
The point of instantiation is at the call site where the default argument is needed, so this is correct.
- Doug
> --
> Abramo Bagnara
>
> BUGSENG srl - http://bugseng.com
> mailto:abramo.bagnara at bugseng.com
More information about the cfe-commits
mailing list