When using the specific form of the macro, there are two things which need
        to be understood when passing the template parameters to the macro. First,
        the type of the template parameters is relevant but the actual names of the
        template parameters passed are irrelevant. The actual names can be left out
        completely or be different from the names in the nested class template itself.
        Second, the use of 'typename' or 'class', when referring to the type of a
        template 