我有一些在 MSVC 下编译良好的代码(或者说是发送给我的 Windows 开发人员),但在 CLang 下会出错。环顾四周后,我发现 CLang 在解决模板专业化方面确实更加严格,但我不确定我应该将专业化放在哪里。基本上我的一个文件有一个这样的结构:
template<>
struct iterator_traits< char * > // error is here
{
typedef random_access_iterator_tag iterator_category;
typedef char value_type;
typedef ptrdiff_t difference_type;
typedef difference_type distance_type;
typedef char * pointer;
typedef char & reference;
};
这是在一个namespace std
块内。错误信息是:
Explicit specialization of 'std::iterator_traits<char *>' after instantiation
同一错误消息的另一部分(通过“扩展”Xcode 中的错误消息查看)说Implicit instantiation first required here
,然后单击它会将我带到stl_iterator.h
,特别是这一行(第 642 行):
typedef typename iterator_traits<_Iterator>::iterator_category
iterator_category;
有谁知道在这种情况下正确的做法是什么?我见过涉及类的示例,但从未见过涉及结构的示例。