在编译一些代码时,我收到了来自g++
4.3.4的以下奇怪消息:
...include/boost/property_tree/stream_translator.hpp: In member function 'typename
boost::enable_if<boost::property_tree::detail::is_translator<Translator>, Type>::type
boost::property_tree::basic_ptree<Key, Data, KeyCompare>::get_value(Translator) const
[with Type = ObjectType, Translator = boost::property_tree::stream_translator<char,
std::char_traits<char>, std::allocator<char>, ObjectType>, Key = std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, Data = std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, KeyCompare =
std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]':
...include/boost/property_tree/stream_translator.hpp:189: note: 'e' was declared here
附近没有任何警告或错误,而且我以前从未在g++
中看到过这样的事情。有人知道发生了什么吗?
2条答案
按热度按时间kxkpmulp1#
在本例中,GCC试图提供发生进一步错误的上下文,您只显示了一个片段,而不是完整的错误,但这就是发生的情况。
这通常发生在模板扩展的过程中。GCC试图提供扩展发生的上下文,因此您有更多的信息来解决这个问题。当您嵌套和/或复杂的模板时,这些“注解”会非常有用。
修复这些错误的最简单方法是自上而下地工作,纠正您看到的第一个错误,然后移动到下一个错误。
pgvzfuti2#
我知道这是一个老主题,但是在升级到wxWidgets(从3.0升级到3.1)和g++(现在运行g++ 5.3.1)的新版本后,我突然看到了同样的事情。
在“note”之前是一个警告,提醒注意一个使用新版本wxWidgets中标记为deprecated的构造函数创建的类。该注解似乎只是显示了声明该构造函数的deprecated版本的位置:
在我的例子中,我通过更改为不同的构造函数消除了警告和注解(尽管不是警告建议的构造函数,它并不真正适合我的需要)。