Travis Vitek wrote:
[...]
Here is one alternative that we might want to consider. Instead of stripping cv qualifiers, we add them and then provide a specialization for the cv-qualified type.template <class T> struct is_cv_void { typedef false_type type; }; template <> struct struct is_cv_void<const volatile void> { typedef true_type type; }; template <class T> is_void: is_cv_void<const volatile T> { }; It is a bit of a compromise between the two implementations shown above. This has the advantage over the "alternative approach" that it reduces the number of templates to parse. It also eliminates the need to instantiate remove_cv that is used in the template metaprogramming case.
Interesting idea!
Martin, if you still have your performance numbers, could you compare this to the previously proposed options?
The test script I've been using most recently is here: http://people.apache.org/~sebor/templatetest This script is slightly different than the test case I used to produce the original numbers. The original test also used the -A option with EDG eccp, while this one doesn't. Running it like this $ ~/tmp/templatetest -c "eccp gcc" -i 20 -t 1000 produces these results (I modified the output to show only user times in a M:SS format in an easy-to-read table): generating 20 instantiations of 1000 distinct types... ECCP GCC 3.9 4.3.0 with add_cv 0:28 0:22 # using is_cv_void without remove_const 0:24 0:19 with remove_const 0:49 0:18 with inline expansion 0:39 0:18 Btw., the EDG eccp times are without the -A strict conformance option that we use; the times with the option are usually much longer (I'd have to modify my script to pass arguments to it to get those results). Martin
