LINUX.ORG.RU

вызов параметризованного метода для поля параметризованного класса - странная ошибка

 ,


0

2
#include <stdint.h>

template <int D, typename T=double>
struct A{
	template <typename T2=T> T2 prod() const { return T2(); }
};

template <typename T, int D>
struct C{
	A<D, int> box;
	double f(){ return box.prod<double>(); }
};
tmp$ g++ -std=c++11 -Wall -c test2.cpp
test2.cpp: In member function ‘double C<T, D>::f()’:
test2.cpp:11:30: error: expected primary-expression before ‘double’
  double f(){ return box.prod<double>(); }
                              ^
test2.cpp:11:30: error: expected ‘;’ before ‘double’
test2.cpp:11:36: error: expected unqualified-id before ‘>’ token
  double f(){ return box.prod<double>(); }
                                    ^
tmp$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper
Target: x86_64-linux-gnu
...
Thread model: posix
gcc version 4.9.2 (Debian 4.9.2-10) 

Ы?

★★★★★

Даблом же, вроде, нельзя инстанцировать шаблоны из-за принципиально неустранимых неоднозначностей и неточностей.

WizardOfOz
()
Ответ на: комментарий от WizardOfOz

Ой, херню сказал. Показалось, что у тебя там от конкретного значения типа double инстанциация зависит.

WizardOfOz
()
Ответ на: комментарий от tailgunner
error: use 'template' keyword to treat 'prod' as a dependent template name
        double f(){ return box.prod<double>(); }
                               ^
                               template 

Ш - шланг.

registrant27492
()
Ответ на: комментарий от tailgunner

Блин... работает, но выглядит как магия;-(

AIv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.