2

我正在尝试使用 type_traits 标头中的 is_member_pointer ,具有以下语法,例如:

cout << is_member_pointer<decltype(&vector<int>::member)>::value;

在向量的情况下,我得到一个“模板参数无效”和一个冗长的“......类型未知”消息,用于所有迭代器函数和除 clear 之外的所有修饰符函数。其他容器功能也有类似的故障。我有 mingw g++ 4.6.2。

有没有办法帮助这个?

4

1 回答 1

5

问题可能是您检查了重载方法的类型。这是不可能的,因为像这样的表达式&std::vector<int>::begin没有类型(有两个重载)。只有在转换为所需类型之后,它才会成为成员函数指针。演员表看起来像这样:

std::cout << std::is_member_pointer<decltype((std::vector<int>::iterator(std::vector<int>::*)())&std::vector<int>::begin)>::value;

不是很美观。

使用非重载方法,它可以工作。

std::cout << std::is_member_pointer<decltype(&std::vector<int>::reserve)>::value;

顺便说一句,使用 gcc-4.7,您甚至会收到更清晰的错误消息:

test.cpp:6:70: error: decltype cannot resolve address of overloaded function
于 2012-06-28T19:56:43.233 回答