败犬日报 2026-01-16
败犬日报 2026-01-16
1. 左值隐式转换后匹配到右值引用
这是一道 cppquiz:
cpp
#include <iostream>
void f(float &&) { std::cout << "f"; }
void f(int &&) { std::cout << "i"; }
template <typename... T>
void g(T &&... v)
{
(f(v), ...);
}
int main()
{
g(1.0f, 2);
}答案是输出 if。
f(1.0f), f(2) 从左到右求值没问题,关键在于 v 是具名的,是个左值,不能匹配到自己类型的右值引用,选择隐式转换成临时值绑定 float lvalue -> int prvalue int lvalue -> float prvalue。
2. C++26 反射已合入 GCC 主线
望周知。