gpt4 book ai didi

c++ - C++ 模板参数中的三元表达式

转载 作者:行者123 更新时间:2023-11-30 03:26:02 25 4
gpt4 key购买 nike

考虑以下(人工)示例:

template <int N>
struct S {};

template <typename T>
S<1 ? 42 : 24> f() { return {}; }

用 MSVC 19 2017 ( https://godbolt.org/g/K58FMr ) 编译它会出现一堆错误:

<source>(5): error C2059: syntax error: '<end Parse>'
<source>(5): error C2976: 'S': too few template arguments
<source>(2): note: see declaration of 'S'
<source>(5): error C2988: unrecognizable template declaration/definition
<source>(5): error C2059: syntax error: '{'
<source>(5): error C2143: syntax error: missing ';' before '{'
<source>(5): error C2447: '{': missing function header (old-style formal list?)

clang 和 gcc 编译成功。是 MSVC 中的错误还是我做错了什么?

附言我知道 1 ? 42 : 24 可以简化。它在这里专门用于在一个可重现的小案例上演示该问题。

最佳答案

MSVC 在解析它时出错。都是有效的 C++。但是,您可以通过添加括号来帮助它:

template <int N>
struct S {};

template <typename T>
S< (1 ? 42 : 24) > f() { return {}; }

See it live

关于c++ - C++ 模板参数中的三元表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610917/

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