gpt4 book ai didi

c++ - 如何在G++中禁止使用内联函数但从未定义过警告

转载 作者:行者123 更新时间:2023-12-02 10:16:30 25 4
gpt4 key购买 nike

上下文:
我正在做一些编译时编程,其中涉及使用仅在decltype上下文中求值的constexpr函数来处理类型。

例如,一个弹出函数将从类型列表中删除第一个类型:

template <typename T0, typename... T1toN>
constexpr auto pop(List<T0, T1toN...>) -> List<T1toN...>;

这些功能是这样使用的
decltype(pop(my_type_list))

换句话说,它们永远不会被“执行”。但是,编译器(g++)会给我警告,例如 warning: inline function ‘constexpr List<T1toN ...> pop(List<T0, T1toN ...>) [with T0 = Type1; T1toN = {Type2, Type3}]’ used but never defined
编辑:原来,仅当间接以十进制类型对函数求值时,才出现警告。即仅以十进制类型评估的顶级函数使用子函数。导致该子功能的警告。
Jarod42创建了一个不错的复制场景 here

问题:有什么方法可以禁止使用此但未定义的警告?并且可能仅对在decltype上下文中(间接)求值的函数执行此操作吗?

我正在使用g++版本8.3

最佳答案


template <typename ...> struct List{};

template <typename T0, typename... T1toN>
constexpr auto pop(List<T0, T1toN...>) -> List<T1toN...>;

template <typename T0, typename... T1toN>
constexpr auto pop2(List<T0, T1toN...> l) { return pop(l); } // You use pop

constexpr List<int, int> my_type_list;
using type = decltype(pop2(my_type_list));

Warning demo
pop2应该没有定义,应该是:
template <typename T0, typename... T1toN>
constexpr auto pop2(List<T0, T1toN...> l) -> decltype(pop(l));

关于c++ - 如何在G++中禁止使用内联函数但从未定义过警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61767563/

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