gpt4 book ai didi

c++ - GNU g++ 4.9.2 中的重载 endl 编译问题

转载 作者:行者123 更新时间:2023-11-30 01:10:26 26 4
gpt4 key购买 nike

我在使用 GNU g++ 4.9.2 编译以下代码片段时遇到问题(用于在 g++ 2.95.3 中编译正常)

XOStream &operator<<(ostream &(*f)(ostream &))  {
if(f == std::endl) {
*this << "\n" << flush;
}
else {
ostr << f;
}
return(*this);
}

错误如下:

error: assuming cast to type 'std::basic_ostream<char>& (*)(std::basic_ostream<char>&)' from overloaded function [-fpermissive]
[exec] if(f == std::endl) {
[exec] ^

请指导/帮助。

最佳答案

使用 static_cast 选择 std::endl 的重载:

#include <iostream>
#include <iomanip>

inline bool is_endl(std::ostream &(*f)(std::ostream &)) {
// return (f == static_cast<std::ostream &(*)(std::ostream &)>(std::endl));
// Even nicer (Thanks M.M)
return (f == static_cast<decltype(f)>(std::endl));
}

int main()
{
std::cout << std::boolalpha;
std::cout << is_endl(std::endl) << '\n';
std::cout << is_endl(std::flush) << '\n';
}

关于c++ - GNU g++ 4.9.2 中的重载 endl 编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37700732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com