
I am still working on the extension of the type trait library to operator detection. I was pretty happy having now all my tests passing with g++, in particular for all possible combinations of const, volatile and reference. I have now some troubles with the intel compiler. The following program reproduces a part of the internal implementation of the operator traits (with T defined below): #include <iostream> void g(T) { std::cout<<"g(T)\n"; } void g(...) { std::cout<<"g(...)\n"; } int main() { int i(0); g(i--); return 0; } This is what I get with g++ 4.6.0 for different values of T: - int&: g(...) - const int&: g(T) - volatile int&: g(...) - const volatile int&: g(...) This is what I get with intel 11.1: - int&: g(...) - const int&: g(T) - volatile int&: g(...) - const volatile int&: error: initial value of reference to const volatile must be an lvalue g++ is just fine for what I want to do but intel issues an error if T is "const volatile&" so that the program cannot compile and the g(...) is not chosen. Does anybody understands if this is the right behaviour according to the standard or if g++ is right chosing g(...)? Cheers, Frédéric