Почему не компилируется в comeau след. код?
От: uzhas Ниоткуда  
Дата: 18.05.10 16:04
Оценка:
Поясните, пожалуйста, с точки зрения стандарта должен ли компилироваться след. код?
#include <vector>

class A
{
};

bool operator==(const A& a, const A& b)
{
  return true;
}

int main()
{
  std::vector<A> a, b;
  return a == b;
}


В comeau это не компилируется со ссылкой на несоответствия класса A требованиям на EqualityComparable

20.1.1 Equality comparison
Table 28—EqualityComparable requirements
a == b convertible to bool == is an equivalence relation,
that is, it satisfies the
following properties:
— For all a, a == a.
— If a == b, then b == a.
— If a == b and b == c, then a == c.

То есть EqualityComparable требует лишь возможность записи
a == b; + свойство рефлексивности, транзитивности и симметричности

А это уже предоставляет библиотека

20.2.1 Operators
1. To avoid redundant definitions of operator!= out of operator== and operators >, <=, and >= out of
operator<, the library provides the following:
template <class T> bool operator!=(const T& x, const T& y);

Я неясно почему комо не схватил этого помощника
Извечный вопрос: кто прав?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.