Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GNU g+中的endl编译重载问题+;4.9.2_C++_C++11_G++_Ostream_Endl - Fatal编程技术网

C++ GNU g+中的endl编译重载问题+;4.9.2

C++ GNU g+中的endl编译重载问题+;4.9.2,c++,c++11,g++,ostream,endl,C++,C++11,G++,Ostream,Endl,在使用GNU g++4.9.2(用于在g++2.95.3中编译ok)时,我在编译以下代码段时遇到问题 XOStream&operator是一个函数模板,您需要指定模板参数。因为您正在使用(即basic_ostream)您可以 if (f == endl<char, std::char_traits<char>>) if(f==endl) 是函数模板,您需要指定模板参数。因为您正在使用(即basic_ostream)您可以 if (f == endl<char, s

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

XOStream&operator是一个函数模板,您需要指定模板参数。因为您正在使用(即
basic_ostream
)您可以

if (f == endl<char, std::char_traits<char>>)
if(f==endl)
是函数模板,您需要指定模板参数。因为您正在使用(即
basic_ostream
)您可以

if (f == endl<char, std::char_traits<char>>)
if(f==endl)

使用
静态模式选择
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';
}
#包括
#包括
内联bool是_endl(std::ostream&(*f)(std::ostream&)){
//返回(f==静态_转换(std::endl));
//更好(谢谢M.M.)
返回(f==静态_转换(std::endl));
}
int main()
{

std::cout使用
静态\u 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';
}
#包括
#包括
内联bool是_endl(std::ostream&(*f)(std::ostream&)){
//返回(f==静态_转换(std::endl));
//更好(谢谢M.M.)
返回(f==静态_转换(std::endl));
}
int main()
{

std::cout或
static\u cast
static\u cast
注意:为避免遇到此类问题,您可以编写XOStreamBuffer并将其附加到XOStream(几乎不变的ostream)那么,你为什么不让
endl
做它的事情呢?因为你想在
XOStream
级别而不是
ostr
级别截取
flush
?你还可以将
else
简化为
返回f(ostr)
直接…我想如果它也在进行类似的黑客攻击,那就行不通了。注意:为了避免遇到这种问题,您可以编写一个XOStreamBuffer并将其附加到XOStream(几乎是一个不变的ostream)那么,你为什么不让
endl
做它自己的事情呢?因为你想在
XOStream
级别而不是
ostr
级别截取
flush
?你还可以简化
else
直接返回f(ostr);
我想如果它也在做类似的攻击,那就行不通了。