-1

我编译了以下代码:

typedef unsigned char uint8;

template <uint8 N> inline uint8 g(uint8 x) { return x > N ? 1 : 0; }

template <size_t stride, size_t boxsize, class T, class F>
  inline void boxfilt(size_t width, size_t size, T * inout, const F & f) {

  }
  template <class T> inline T self(const T & x) { return x; }
  template <size_t stride, size_t boxsize, class T>
  inline void boxfilt(size_t width, size_t size, T * inout) {
    return boxfilt<stride, boxsize>(width, size, inout, self<T>);
  }

int main(int argc, char* argv[])
{
    uint8 *out = NULL;
    boxfilt<3,4>(10,29,out,g<4>);

    return 0;
}

在 g++ 编译器中,它工作正常。当我尝试在 Visual Studio 2008 编译器中编译相同的代码时,它显示以下错误:

Error   1   error C2780: 'void boxfilt(size_t,size_t,T *)' : expects 3 arguments - 4 provided   g:\testfjx\test\test.cpp    
Error   2   error C2784: 'void boxfilt(size_t,size_t,T *,const F &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'    g:\testfjx\test\test.cpp    
Error   3   error C2784: 'void boxfilt(size_t,size_t,T *,const F &)' : could not deduce template argument for 'T *' from 'uint8 *'  g:\testfjx\test\test.cpp

我该如何解决这个问题?

4

1 回答 1

1

没关系,在 Visual C++ 2008 中也是如此。

如果 VC++2008 和 G++4.7.2 都接受代码而 VC++2005 不接受,那么可能 VC++2005 有 bug,可能它没有完全实现 C++ 规范。

于 2013-03-11T11:27:47.033 回答