ваша функция член gps_position'а имеет скрытый параметр- указатель на gps_position, сотвественно чтобы её вызывать нужно передавать этот самый указатель
Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>Здравствуйте, wander, Вы писали:
W>>По мотивам вышепроцитированного: ЮЖ>... W>>boost::function1<bool, const gps_position*> bfe1 = extract<bool() const>(&gps_position::empty);
W>>[/ccode]
ЮЖ>'const' не может быть использован в таком контексте, см 8.3.5/4.
Прочитал,теперь прошу пояснить чем в данном контексте
Здравствуйте, wander, Вы писали:
ЮЖ>>'const' не может быть использован в таком контексте, см 8.3.5/4.
W>Прочитал,теперь прошу пояснить чем в данном контексте W>
Лично я не вижу в стандарте гарантий корректности ни того, ни другого.
8.3.5/7:
A typedef of a function type whose declarator includes a cv-qualifier-seq shall be used only to declare the function type for a nonstatic member function, to declare the function type to which a pointer to member refers, or to declare the top-level function type of another function typedef declaration.
Формулировка стандарта в очередной раз не блещет ясностью. Что значит "declare funtion type"? Насколько я понимаю, "объявить тип" означает объявить имя, обозначающее тип. В случае объявления нестатической функции-члена её тип не объявляется (он может лишь использоваться в decl-specifier-seq). Возможно, здесь имеется в виду, что при соблюдении остальных правил такой псевдоним может законно использоваться только:
1) в качестве decl-specifier при объявлении нестатической функции-члена внутри определения класса;
2) в качестве decl-specifier или type-specifier-seq, за которым следует либо declarator вида ptr-operator declarator, либо abstract-declarator вида ptr-operator abstract-declarator opt, где ptr-operator имеет вид ::opt nested-name-specifier * cv-qualifier-seq opt;
3) в качестве decl-specifier в typedef declaration.
В таком случае указание подобного псевдонима шаблонным аргументом оказывается в пролёте. На практике с этого тоже ничего хорошего не выходит:
typedef int F1() volatile;
typedef int F2() const;
typedef int F3();
template <class T>
struct X {};
bool f(X<F1>);
void f(X<F2>) {}
void f(X<F3>) {}
int main() {}
Comeau online и Intel C++ 11.0 cчитают, что типы X<F1>, X<F2> и X<F3> совпадают.
GNU C++ 4.1.2 считает, что эти типы разные.
VC++ 9.0 вообще показывает интересные результаты: компилятор считает, что эти типы разные, а линкер — что они одинаковые.
GNU C++ тоже не без прикола.
8.3.5/4:
The effect of a cv-qualifier-seq in a function declarator is not the same as adding cv-qualification on top of the function type, i.e., it does not create a cv-qualified function type.
Несмотря на это, GNU C++ пытается удалить top level cv-qualifier при попытке применить typeid: http://codepad.org/FsiC3q5J