Есть простейший код:
#include <iostream>
using namespace std;
template<int size>
class A
{
};
template<int size>
A<size> operator&(const A<size>&, const A<size>&);
enum class En : int { a, b, c };
int main() {
En en1 = En::a;
En en2 = En::b;
En en3 = En::a & En::b;
return 0;
}
VS2013 ругается:
<source>(19): error C2784: 'A<size> operator &(const A<size> &,const A<size> &)': could not deduce template argument for 'const A<size> &' from 'En'
<source>(11): note: see declaration of 'operator &'
<source>(19): error C2676: binary '&': 'En' does not define this operator or a conversion to a type acceptable to the predefined operator
Хочется спросить у знатоков С++ — что происходит с перегрузкой, почему так и по стандарту ли это? Можно как-то поправить (сделать что бы operator& разрешался только для класса A<uint_t>) ?