
This is what I initially tried to do. However, it is difficult to make work.
Consider:
template<typename T> class myclass { }; __extension__ template<> class myclass<long long> { };
Note the placement of __extension__. This is the only place that __extension__ can be placed that it will make the error go away, and not trigger a parse error.
Simply prefixing "long long" with __extension__ does not, in general, work. With complicated source lines, the placement of __extension__ may be entirely non-obvious. It is possible, for certain constructs, that there is no appropriate way that __extension__ might be added. In fact, the documentation is not clear on exactly how __extension__ is supposed to be placed, as (in my reading) its description does not correspond with actual usage: http://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/Alternate-Keywords.html
Using __extension__ at each instance of long long would require anyone using long long in Boost headers to know particular characteristics of GCC in this regard, which I think is unacceptable. I think a typedef is the only way to shield the rest of Boost from this issue.
OK, understood. John.