提问人:tommsch 提问时间:7/26/2023 最后编辑:tommsch 更新时间:7/26/2023 访问量:78
为什么 - 在具有扩展 lambda 的示例中 - 是一个模棱两可的复制构造函数和一些已删除的函数
Why - in that example with an extended lambda - is an ambigious copy constructor and some deleted function
问:
我不明白以下代码的行为:
template< bool b >
struct Foo {
Foo() = default;
__host__ Foo( const Foo & ) requires( b ) {}
__device__ Foo( const Foo & ) requires( !b ) {}
};
template< typename Lambda >
__global__
void kernel( Lambda ) {}
int main() {
Foo< true > foo;
auto la = [foo] __device__ (){ };
kernel<<< 1, 1 >>>( la );
}
当我使用 nvcc 12.1 和 gcc 11.3 作为主机编译器 () 编译它时,我收到两个错误nvcc main.cu -std=c++20 --expt-extended-lambda
-
copy constructor for class "Foo<true>" is ambiguous auto la = [foo] __attribute__((device)) (){ }; ^
-
function "lambda []()->void::<unnamed>(const lambda []()->void &)" (declared implicitly) cannot be referenced -- it is a deleted function kernel<<< 1, 1 >>>( la ); ^
我不明白这两个错误。
- 为什么复制 ctor 模棱两可?
- 哪个函数被删除了,编译器希望在什么位置使用它?
答: 暂无答案
评论