[cfe-users] Templated operator overloading in C++11 mode
    Matthias Maier 
    tamiko+LLVM at kyomu.43-1.org
       
    Mon Oct 14 12:51:03 PDT 2013
    
    
  
Hi folks,
I've a question about Clang's behaviour with the following snippet of
code:
  #include<iostream>
  #include<vector>
  class Foo
  {
  public:
    template<typename T>
    Foo& operator<< (const T &t)
    {
      std::cout << 'a' << std::endl;
      return *this;
    }
  };
  template<typename T>
  Foo& operator<< (Foo &foo, const std::vector<T> &t)
  {
    std::cout << 'b' << std::endl;
    return foo;
  };
  int main()
  {
    Foo foo;
    std::vector<int> bar;
    foo << bar;
  }
Compiling and running it _without_ -std=c++11 gives 'b', compiling
_with_ -std=c++11 leads to 'a', the second templated operator 
is ignored. gcc and icc still give 'b' in c++11 mode.
So, what is the correct behaviour?
Best,
Matthias
    
    
More information about the cfe-users
mailing list