0

最近、Codepad でいくつかのテンプレート コードをテストしました。コードは正しいのですが、GCC は本当に奇妙なエラーを出しています。Ideoneでもテストしました:

テスト済みコード:

template<int num>
struct count;

template<>
struct count<-1>
{
};

int main()
{
 return 0;
}

Codepad (GCC 4.1.2) およびIdeone (GCC 4.3.4)での結果は次のとおりです。 GCC 4.1.2 出力:

Line 5: error: 'count' is not a template

一方、GCC 4.3.4 はエラーなしで正常にコンパイルされます。これは本当にコンパイラのバグですか、それとも私のコードが正しくないのですか (そして、拡張機能のおかげでコンパイルされますか?)

4

3 に答える 3

7

私が試したら

template<int num>
struct count;

template<>
struct count<-1>
{
};

int main()
{
 return 0;
}

g++ 4.1.2 では問題ありません。私が試したら

#include <algorithm>
using namespace std;

template<int num>
struct count;

template<>
struct count<-1>
{
};

int main()
{
 return 0;
}

g++ -Wfatal-errors を使用すると、

count.cpp:8: error: 'count' is not a template
compilation terminated due to -Wfatal-errors.

だから私の推測では、コードパッドがあなたにプリアンブルを強制していて、それがエラーを引き起こしていると思います.

于 2012-09-20T13:53:08.700 に答える
3

Codepad は、必要かどうかに関係なく一連の#includes と aを静かに追加しているように見えます: 単独でコンパイルすべきではないこの例を参照してください:using namespace std;

int main()
{
    cout << "Hello" << endl;
}

Output: Hello

countこれにより、名前空間にも存在するグローバル名前空間で名前 ( ) を定義するコードが壊れる可能性がありstdます。

于 2012-09-20T13:57:46.413 に答える