2016-05-06 4 views
0

私は以前、Microsoftコンパイラで正常にコンパイルされていたこのコードセクションを持っています。私は今、clangに切り替えて、次のエラーを受けています:機能テンプレートが壊れています

エラー16エラー:期待されるメンバー名または ';'宣言 指定子後 - :型名 'コード行の

template<typename PRIM> typename const PRIM::OutputPtrType   GetData(unsigned long index = 0) const; 

は誰もい

エラー15エラー後修飾名を期待'問題が何であるか知っていますか?

答えて

3

typename constconst typenameに変更してください。

型名... オプト識別子オプトを:C++ Grammar rules for templates

template<typename PRIM> const typename PRIM::OutputPtrType   GetData(unsigned long index = 0) const; 

は指示typenameのためのエントリがあります。

型名ネスト名指定子識別子

constむしろidentifiercv-qualifierありません。コンテキスト内の識別子は従属名です。 OutputPtrTypeは名前PRIMに依存するため、基本的にはPRIM::OutputPtrTypeです。 2行目では、より正確にはPRIM::がネストされた名前指定子であると言うことができます。

修飾-IDが、現在のインスタンス([temp.dep.type])およびその ネスト名指定子の メンバーではないタイプを指すことを意図しているEDIT

$14.6:1を指します型依存型の場合、接頭辞は とし、型名指定子を構成する。型名指定子の 修飾IDが型を示さない場合、 プログラムは不正です。

typename-specifier: 
    typename nested-name-specifier identifier 
    typename nested-name-specifier templateopt simple-template-id 
2

あなたは右にconstを移動する必要があります:コンパイラは修飾名を期待しtypenameキーワードの後に​​このような状況において

template<typename PRIM> 
const typename PRIM::OutputPtrType GetData(unsigned long index = 0) const; 
^^^^^ 

template<typename PRIM> 
typename PRIM::OutputPtrType const GetData(unsigned long index = 0) const; 
          ^^^^^ 

または左へ。

+0

これはそれが前に働いてくるか、働いていましたか? – marsh

+0

@marshどのコンパイラ? – 101010

+0

Microsoft C/C++コンパイラ – marsh

関連する問題