【发布时间】:2015-04-25 16:35:05
【问题描述】:
这是我之前问题的延续:
Can an identity alias template be a forwarding reference?
以下代码似乎在 Clang 3.7.0 (demo) 和 GCC 6.0.0 (demo) 中都有效:
template <class T>
using forwarding_reference = T&&;
template <class T>
void foo(forwarding_reference<T>) {}
int main()
{
int i{};
foo(i);
foo(1);
}
编译器是否有权将别名模板替换为转发引用,这可能是一种奇特的编写方式?
【问题讨论】:
-
这不是完全相同的问题和完全相同的答案吗?
-
@Barry 这不是重复的。
-
@Barry 我不想更新已经回答的问题,认为这会让读者感到困惑
-
clang++3.5 顺便拒绝了这个程序。我记得不久前在 g++ 和 clang++ 中尝试过这个,并且对它在 clang 中不起作用感到失望。这似乎是隐藏
T&&实现细节同时提高可读性的好方法。查找提及类似问题的 clang 错误报告以及是否有一些讨论可能会很有趣。
标签: c++ templates alias c++14 forwarding-reference