前几天在进行一些模板元编程时遇到了一些奇怪的问题。基本上就是这个断言没有通过(与我预期的不同)。
起初我以为我在定义一个函数引用时犯了语法错误,但这个断言通过了,表明并非如此。
我也尝试过自己实现
static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
起初我以为我在定义一个函数引用时犯了语法错误,但这个断言通过了,表明并非如此。
static_assert(std::is_same_v<void()&, void()&>);
我也尝试过自己实现
remove_reference
,从cppreference上复制了源代码,但也没有成功。这里到底发生了什么?
void (void)
。函数指针是void (*) (void)
。而一些返回类型说明符会“爬过头部”并出现在参数列表之后。好老的K&R。所有这些C++添加的都是限定符和能够在成员函数中使用的能力:void (Class::*) (/*跳过void*/) /*const/ref-qualifier*/
。 - undefined