Il 17/11/2014 01:15, Douglas Gregor ha scritto: > > > Sent from my iPhone > >> On Nov 8, 2014, at 1:21 AM, Abramo Bagnara <[email protected]> >> 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.
I don't understand: despite point of instantiation (where I agree) I don't think that different calls should get different instantiations in the same translation unit... I'm missing something? The point is that every call get a separate instantiation, while the ParamDecl initializer in function instance is left untouched. -- Abramo Bagnara BUGSENG srl - http://bugseng.com mailto:[email protected] _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
