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