gpt4 book ai didi

clang 和 gcc 中的 C++14 可变参数模板参数推断

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

我正在使用 clang 3.5.0 和 gcc 版本 4.9.2(两者都启用了 C++14 选项,尽管尾随返回类型可以在 C++11 中完成)。

以下代码在 g++ 中编译,而不是在 clang++ 中编译。我的问题是“哪一个是正确的?”

#include <iostream>
#include <tuple>
#include <functional>
using namespace std;

template<typename OP, typename F1, typename... Fs>
struct symop {
OP op;
tuple<F1,Fs...> fs;

symop(const OP &oopp, const F1 &f1, const Fs &...ffss)
: op(oopp), fs(f1,ffss...) {}
};

template<typename OP, typename... Fs>
auto baz(const symop<OP,Fs...> &so) {
return so.op(get<0>(so.fs),get<1>(so.fs));
}

/* // this version compiles on both compilers
template<typename OP, typename F1, typename... Fs>
auto baz(const symop<OP,F1,Fs...> &so) {
return so.op(get<0>(so.fs),get<1>(so.fs));
}
*/

int main() {
symop<plus<int>,int,int> so{plus<int>{},3,4};
cout << baz(so) << endl;
}

叮当报告

q.cpp:29:10: error: no matching function for call to 'baz'
cout << baz(so) << endl;
^~~
q.cpp:16:6: note: candidate template ignored: couldn't infer template argument
'OP'
auto baz(const symop<OP,Fs...> &so) {
^

最佳答案

你应该明白 Clang 仍然是实验性的(即使它被“广泛”使用),并且基本上是建立在 GCC 之上的(尽管它有一些重大的变化)并且你可以确定它的一切(谈论 C++ 代码)在 GCC 中编译应该在 Clang 中编译,如果不是,则为 Clang 错误。

GCC 是时候证明自己的强大了。

关于clang 和 gcc 中的 C++14 可变参数模板参数推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627599/

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