Ru-Brd |
Default function call arguments can be specified in function templates just as they are in ordinary functions: template<typename T> void init (T* loc, T const& val = T()) { *loc = val; } In fact, as this example shows, the default function call argument can depend on a template parameter. Such a dependent default argument is instantiated only if no explicit argument is provided ”a principle that makes the following example valid: class S { public: S(int, int); }; S s(0, 0); int main() { init(&s, S(7, 42)); // T() is invalid for T=S , but the default // call argument T() needs no instantiation // because an explicit argument is given } Even when a default call argument is not dependent, it cannot be used to deduce template arguments. This means that the following is invalid C++: template<typename T> void f (T x = 42) { } int main() { f<int>(); // OK: T = int f(); // ERROR: cannot deduce T from default call argument } |
Ru-Brd |