这是仅在使用某些编译器参数的情况下在编译时返回的异常错误。
使用g++ -std=c++11 -m64 -O3 -DNDEBUG
但是使用g++ -std=c++11 -m64 -Wall -g
时,会发生此问题:
宏“ htonl”传递了7个参数,但仅接受了1个
代码:
const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);
我不确定问题是来自htonl
的调用还是来自我的模板哈希器。
您知道如何解决吗?
其他信息:
template<const char C0, const char C1 = '\0', const char C2 = '\0',
const char C3 = '\0', const char C4 = '\0', const char C5 = '\0',
const char C6 = '\0', const char C7 = '\0', const char C8 = '\0',
const char C9 = '\0', const char C10 = '\0'>
struct CompileTime
{
//Do you think this code could help?
};
答案 0 :(得分:5)
添加另一对大括号:
htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash))
答案 1 :(得分:1)
一种解决方案是帮助宏附加括号:
const unsigned int h = htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash));
解释原因...这篇文章会有所帮助 Comma in C/C++ macro
这是宏中逗号解释的问题。