gpt4 book ai didi

c++ - 调试可变参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:52 27 4
gpt4 key购买 nike

我目前正在调试我们构建中的一个问题,在可变参数中,参数的数量与预期不符。

目前我的代码看起来类似于:

class CustomException : public BaseException
{
public:
template<typename ...T>
CustomException(T &&...args) : BaseException(std::forward<T>(args)...)
{
static_assert(sizeof...(T) == 2);
}
};
throw CustomException{size_t{}, size_t{}};

根据这段代码,人们会期望将 2 个参数传递给 Ctor。

令人惊讶的是,此代码在 MSVC 上的表现与预期一致,但在 static_assert 上与 Clang 失败。

你们中有人知道强制 clang 揭示它假定的可变参数包是什么的技巧吗?

编辑 问题与需要抛出的复制构造有关,非常特定于 Clang-Cl

最佳答案

手头的问题似乎是一个编译器错误,记录为 https://bugs.llvm.org/show_bug.cgi?id=38801

完整复制:

测试.cpp

struct A
{
template<typename ... T>
A(T &&...t)
{
static_assert(sizeof...(T) == 2);
}

A(const A &) = default;
//A(A &) = default;
A(A &&) = default;
A &operator=(const A &) = default;
A &operator=(A &&) = default;
};


int main(int, char **)
{
throw A{size_t{}, size_t{}};
return 0;
}

运行.bat

clang-cl.exe -fms-compatibility-version=19.11 /DBOOST_USE_WINDOWS_H -w -Wno-unused-command-line-argument /Zc:inline /nologo /c /GR /EHsc /fp:precise /FS /std:c++17 /diagnostics:caret /O2 /I. /MDd /Zc:forScope /bigobj /Zc:wchar_t test.cpp

错误

test.cpp(7,7):  error: static_assert failed
static_assert(sizeof...(T) == 2);
^ ~~~~~~~~~~~~~~~~~
test.cpp(20,10): note: in instantiation of function template specialization 'A::A<A &>' requested here
throw A{size_t{}, size_t{}};
^
1 error generated.

关于c++ - 调试可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52126571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com