相关疑难解决方法(0)

我必须在何处以及为何要使用"模板"和"typename"关键字?

在模板,在那里,为什么我必须把typenametemplate上依赖的名字呢?究竟什么是依赖名称?我有以下代码:

template <typename T, typename Tail> // Tail will be a UnionNode too.
struct UnionNode : public Tail {
    // ...
    template<typename U> struct inUnion {
        // Q: where to add typename/template here?
        typedef Tail::inUnion<U> dummy; 
    };
    template< > struct inUnion<T> {
    };
};
template <typename T> // For the last node Tn.
struct UnionNode<T, void> {
    // ...
    template<typename U> struct inUnion {
        char fail[ -2 + (sizeof(U)%2) ]; // Cannot be instantiated for any …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++-faq dependent-name typename

1061
推荐指数
8
解决办法
15万
查看次数

[] <typename>(){}是一个有效的lambda定义吗?

我正在尝试使用lambdas和编译器,因为这里有另一个问题.
我刚刚意识到(并且确实非常正常)以下代码是有效的:

int main() {
    auto l = [](){};
    l.operator()();
}
Run Code Online (Sandbox Code Playgroud)

实际上标准说闭包类型有一个公共内联函数调用操作符等等,因此能够调用它是有意义的.

通过查看标准(以及工作草案)我无法解释的是,GCC(6.1)编译了以下代码段(clang 3.9没有):

int main() {
    auto l = []<typename>(){};
    l.operator()<void>();
}
Run Code Online (Sandbox Code Playgroud)

没有警告,没有错误.它是有效的代码还是被编译器拒绝?

c++ lambda gcc clang language-lawyer

23
推荐指数
1
解决办法
1181
查看次数