gpt4 book ai didi

c++ - 模板模板参数和默认值

转载 作者:可可西里 更新时间:2023-11-01 15:22:16 25 4
gpt4 key购买 nike

<分区>

考虑以下代码:

template<typename T>
struct A { };

// same as A, but with one extra defaulted parameter
template<typename T, typename F = int>
struct B { };

template<template<typename> typename T>
T<int> build() { return {}; }

int main()
{
build<A>(); // works in gcc and clang
build<B>(); // works in gcc, does not work in clang
}

g++ (7.3.0) 可以很好地编译代码,但是,clang++ (5.0.1) 会发出以下内容:

example.cpp:14:5: error: no matching function for call to 'build'
build<B>(); // works in gcc, does not work in clang
^~~~~~~~
example.cpp:9:8: note: candidate template ignored: invalid
explicitly-specified argument for template parameter 'T'
T<int> build() { return {}; }

哪个编译器是正确的?


注意:重要的一行显然是:

template<template<typename> typename T>

因为两个编译器都满意:

template<template<typename...> typename T>

所以问题是在传递模板模板参数时是否应该考虑默认值。

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