++ 4.6.3(4.6.3-1ubuntu5 /リナロUbuntuの)、期待プライマリー・表現「>」G ++の前ではなく、マイクロソフトのコンパイラでこのエラーと
test.cpp: In function ‘T mul(V&, V&)’:
test.cpp:38:27: error: expected primary-expression before ‘>’ token
test.cpp:38:29: error: expected primary-expression before ‘)’ token
test.cpp:38:53: error: expected primary-expression before ‘>’ token
test.cpp:38:55: error: expected primary-expression before ‘)’ token
が、それはコンパイルおよびx64
#include <iostream>
#include <complex>
template <class T>
class SM
{
public:
T value;
};
template <class T>
class SC : public SM<T>
{
};
class PSSM {
public:
template <class T>
T & getSC() { return sc; }
private:
SC<double> sc;
};
class USSM {
public:
template <class T>
T & getSC() { return sc; }
private:
SC<std::complex<double> > sc;
};
template <class T, class V>
T mul(V & G, V & S) {
return (G.getSC<SC<T> >().value * S.getSC<SC<T> >().value); // error is here
}
int main() {
PSSM p;
PSSM q;
p.getSC<SC<double> >().value = 5;
q.getSC<SC<double> >().value = 3;
std::cout << mul<double>(p,q);
}
問題がどこにあるか私は理解していないために、Microsoft C/C++最適化コンパイラバージョン15.00.21022.08で正しく実行されます。誰かがそれを回避する方法を理解することができますか、またはg ++の問題の性質を説明できますか?
が、なぜそれが正しくで始めるために解析されていませんか?あいまいさはどこで発生しますか? –
'template'キーワードがないと、コンパイラによって型パラメータのリストと小なり演算子が混同されることがあります。 – bstamour
最も醜い。曖昧さ回避これまで – mfontanini