Template non-type arguments
Such arguments must be constant expressions, addresses of functions or objects with external linkage, or addresses of static class members. Non-type template arguments
are normally used to initialize a class or to specify the sizes of class members.
template<class T, int size> class MyTemplateClass {...}
Template template arguments
template<template<class T> class U> class B1