Figure 1: Using the template class that wraps built-in types

class foo
{
private:
    builtin<int> b;
};
     
void xyz(void)
{
    // invokes builtin<float>::builtin(),
    // so x is initialized to 0.
    builtin<float> x;
     
    // the compiler-generated foo::foo()
    // invokes builtin<int>::builtin(), 
    // so y.b is initialized to 0.
    foo y;
}