Перегрузка operator&
От: Videoman Россия https://hts.tv/
Дата: 08.02.19 10:40
Оценка:
Есть простейший код:
#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>) ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.