小编bug*_*nny的帖子

Olve Maudal的C++测验背后的解释(别名模板)

以下代码来自http://www.pvv.org/~oma/PubQuiz_ACCU_Apr2014.pdf(#6,第34页的解决方案).目标是猜测以下输出.

#include <iostream>
template <template <typename> class>
struct X {
    X() { std::cout << "1"; }
};

template<typename >
struct Y {};

template<typename T>
using Z = Y<T>;

template<>
struct X<Y> {
    X() { std::cout << "2"; }
};

int main() {
    X<Y> x1;
    X<Z> x2;
}
Run Code Online (Sandbox Code Playgroud)

答案可以在第34页找到.我不理解别名模板的第二种情况,为什么选择主模板X<Z>而不是完全专业化.

正确答案应为"21",如本文所述.我的MinGW(gcc 5.1)打印"22",而http://ideone.com(使用gcc 4.9.2)也打印"22".来自MacOS X上的朋友的Clang打印"21".所以我猜这是gcc中的一个bug.

任何人都可以向我解释为什么打印"1" X<Z>并且标准gcc中的哪一段可能无法实现或尚未实现?

c++ alias gcc templates clang

8
推荐指数
1
解决办法
292
查看次数

折叠表达式的值类别是否始终为prvalue?

折叠表达式总是prvalue吗?它是否正确?

template<typename... Args>
auto sum(Args... args) {
    auto fold = (... +  args);
    return fold;
}

int main() {
    sum(10, 2, 2);
}
Run Code Online (Sandbox Code Playgroud)

我真的只对(... + args)上面例子中的fold表达感兴趣.

c++ c++17

5
推荐指数
1
解决办法
169
查看次数

标签 统计

c++ ×2

alias ×1

c++17 ×1

clang ×1

gcc ×1

templates ×1