
Eric Niebler wrote:
Eric Niebler wrote:
Here's my latest attempt. This works on gcc 3.4.4 (cygwin), but not on VC7.1 or (sadly) Comeau Online. Language lawyers, start your engines!
Eric, this is very cool :-) I tried to simplify it a little:
template<typename T> struct probe { operator T (); operator T volatile const &() const; };
template<typename T> struct probe { operator T (); operator T&() const; };
template<typename T> char is_volatile(T const &);
template<typename T> double is_volatile(T const volatile &);
template<typename T> char is_volatile( const T& ); template<typename T> double is_volatile( T& ); That gave the same results. Then I did
template<typename T> probe<T> make_probe(T const &);
template<typename T> const probe<T> make_probe(T const &); Now it works on vc7.1 too. Not como. I'm not a language specialist and my understanding of ?: comes mainly from your article. That said, I find the solution very intuitive. best regards Thorsten