编译器抱怨模板参数的数量错误,即使它在boost库文件中是正确的

时间:2011-08-17 07:25:52

标签: c++ templates boost compiler-errors

boost库中有一个名为has_new_operator.hpp的文件。当我使用GCC 4.3.1

压缩文件时,我收到以下错误
  

type_traits / has_new_operator.hpp:45:错误:模板数量错误   参数(1,应为2)type_traits / has_new_operator.hpp:24:错误:   提供'template struct boost :: detail :: test'

按照第24行,它需要2个参数,这就是第42行传递的内容。另外,如果你观察第31行,那么已经完成了相同但编译器没有抱怨它。

21: namespace boost {
22: namespace detail {
23: template <class U, U x> 
24:    struct test;
25:
26: template <typename T>
27: struct has_new_operator_impl {
28:    template<class U>
29:    static type_traits::yes_type check_sig1(
30:        U*, 
31:        test<
32:        void *(*)(std::size_t),
33:            &U::operator new
34:        >* = NULL
35:    );
36:    template<class U>
37:    static type_traits::no_type check_sig1(...);

39:    template<class U>
40:    static type_traits::yes_type check_sig2(
41:        U*, 
42:        test<
43:        void *(*)(std::size_t, const std::nothrow_t&),
44:            &U::operator new
45:        >* = NULL
    );

2 个答案:

答案 0 :(得分:2)

您当前的代码似乎看不到std::size_t。您可以在此代码之前尝试#include<iostream>

Simulating your error

Fixing your error

答案 1 :(得分:0)

问题在于std :: nothrow_t(第43行)不可见。我在std命名空间中包含了一个包含nothrow_t的文件,它运行正常。谢谢你的回复。