4

これをここに投稿して、完全に明白なものを見逃していないことを確認したいと思います(したがって、非常にばかげていると感じます)。これは私が書いたいくつかのコードの簡略版です。

template <int NDIM, typename T = int>
class COORD {
public:
    COORD(T dim0) { m_data[0] = dim0; }
private:
    T m_data[NDIM];
};

template <class COORD>
class NODE {
public:
    NODE(const COORD& c = COORD()) : m_coord(c) {}
private:
COORD m_coord;
};

int main()
{
    const int VAL = 10;
    NODE< COORD<1> > n( COORD<1>( VAL ) ); // warning c4930???
    NODE< COORD<1> > n2( COORD<1>( 10 ) );
    COORD<1> c( VAL );
    NODE< COORD<1> > n3( c );
    return 0;
}

ステートメント「NODE<COORD<1>> n(COORD <1>(VAL));」与える:

warning C4930: 'NODE<COORD> n(COORD<NDIM>)': prototyped function not called
(was a variable definition intended?)
    with
    [
        COORD=COORD<1>,
        NDIM=1
    ]

ただし、「n2」および「n3」のdeclは正常にコンパイルされます。これはVC2008とVC2010でのことでしたが、私はまだVC2012を試していません。このコードブロックは、GCC4.5.3で正常にコンパイルされるようです。

4

1 に答える 1