Ну воот, первая реальная проблема концептов
От: Шахтер Интернет  
Дата: 12.05.16 16:38
Оценка: 10 (3)
Неполные типы.

Фрагмент кода

struct Dir : DirName , MemBase_nocopy
 {
  CompactRBTreeMap<StrKey,Entry> entries;
  CompactRBTreeMap<StrKey,OwnPtr<Dir> > dirs;

  ....

 };


Если я добавляю концепт в определение OwnPtr, то это не компилируется, поскольку в выделенной точке Dir -- неполный тип.
Та же проблема возникает при использовании CRRT паттерна.

template <class T>
struct CmpComparable
 {
  friend bool operator < (const T &a,const T &b) requires ( Has_objCmp<T> ) { return a.objCmp(b)<0; }

  friend bool operator > (const T &a,const T &b) requires ( Has_objCmp<T> ) { return a.objCmp(b)>0; }

  friend bool operator <= (const T &a,const T &b) requires ( Has_objCmp<T> ) { return a.objCmp(b)<=0; }

  friend bool operator >= (const T &a,const T &b) requires ( Has_objCmp<T> ) { return a.objCmp(b)>=0; }

  friend bool operator == (const T &a,const T &b) requires ( Has_objCmp<T> ) { return a.objCmp(b)==0; }

  friend bool operator != (const T &a,const T &b) requires ( Has_objCmp<T> ) { return a.objCmp(b)!=0; }
 };

class SomeClass : public CmpComparable<SomeClass> 
 {
  ....
 };


Здесь приходится спускать ограничения на уровень методов, чтобы работало.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.