将类型转换应用于列表:“ const”是否特殊?

IAVR

以下适用类型转换F到一个列表C的类型E...

template <template <typename...> class F, typename P> struct apply_t;

template <
    template <typename...> class F,
    template <typename...> class C, typename... E
> struct apply_t <F, C <E...> > { typedef C <F <E>...> type; };

template <template <typename...> class F, typename P>
using apply = typename apply_t<F, P>::type;

现在,输入以下内容:

template <typename T> using map1 = T*;
template <typename T> using map2 = const T;
template <typename T> using map3 = const T*;

我在gcc 4.8.1中得到以下输出,例如std::tuple

apply <map1, tuple <int, char> >  // -> tuple <int*, char*>  (OK)

apply <map2, tuple <int, char> >  // -> tuple <int, char>
  // (tuple <const int, const char> expected)

apply <map3, tuple <int, char> >  // -> tuple <const int*, const char*> (OK)

我可以使用调用的实用程序模板函数来查看输出类型static_assert()

我尝试了各种组合。const T将map作为输入类型map给出时,除map之外的所有东西都可以工作apply但是如果我将它嵌入到的定义中apply还是可以的,即typedef C <const E...> type

另一方面,一切都在clang中按预期工作。我可能遗漏了一些东西,但对我来说确实好像是一个gcc错误。

有任何想法吗?

丹尼尔·弗雷(Daniel Frey)

这是一个完整但精简的测试用例,您可能要将其添加到GCC错误报告中(如果需要编写一个):

template< typename T > using Map = const T;

template< template<typename> class M, typename T >
struct Apply;

template< template<typename> class M, template<typename...> class C, typename... Ts >
struct Apply< M, C<Ts...> > { typedef C<M<Ts>...> type; };

template< typename T > struct A {};
template<typename> void dummy();

int main()
{
    dummy< Apply<Map,A<int>>::type >();    
}

将由于以下原因而无法链接

undefined reference to `void dummy<A<int> >()'

而不是预期的

undefined reference to `void dummy<A<const int> >()'

(我知道这不能解决问题,但是GCC的人们可能会更喜欢简化的测试用例,而不依赖于std::tuple任何其他标头)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将类型转换应用于列表:“ const”是否特殊?

来自分类Dev

如何使用Fluent断言断言是否将转换器应用于类型

来自分类Dev

将const调用应用于原始类型时,是否可以提高性能?

来自分类Dev

在将“splitAt”应用于“List”之后,是否有任何简洁的方法可以将类型从“Int”转换为“Double”?

来自分类Dev

是否将KnownTypeAttribute应用于对象类型?

来自分类Dev

Haskell是否有用于创建将函数应用于列表的各种变体的函数

来自分类Dev

是否可以将NSShadowAttribute应用于NSMutableArray或将NSMutableArray转换为NSMutableString?

来自分类Dev

如何将条纹字体应用于特殊字符?

来自分类Dev

如果列表不为空,则在scala或scalaz中是否存在将函数应用于列表的函数?

来自分类Dev

是否将可选类型名应用于概念?

来自分类Dev

无法将const应用于typedef引用

来自分类Dev

如何将掩码应用于const void *地址?

来自分类Dev

将sizeof()应用于const char * array []中的元素

来自分类Dev

是否存在将单一转换应用于无限元素流的双重模式?

来自分类Dev

是否有 Spark SQL Only 解决方案将强制转换应用于复杂列(map,struct)

来自分类Dev

索引映射/过滤的无限列表是否将map / filter函数应用于索引之前的所有元素?

来自分类Dev

是否有一个函数可以将 NumPy 的广播规则应用于形状列表并返回最终形状?

来自分类Dev

是否可以将渐变应用于框阴影?

来自分类Dev

是否可以将变化应用于ggvis中的属性

来自分类Dev

如何知道是否将OrderBy应用于查询?

来自分类Dev

是否有将属性应用于类的迭代方法?

来自分类Dev

是否可以仅将setuid应用于特定用户?

来自分类Dev

是否将ReceiveTimeout应用于隐藏的邮件

来自分类Dev

是否可以将 CSS 样式应用于容器元素?

来自分类Dev

是否可以将 RenderTransform 应用于实际的 UIElements?

来自分类Dev

将条件应用于结构并产生结构类型的列表

来自分类Dev

是否有可能仅将CSP应用于父框架,而不应用于任何iframe?

来自分类Dev

是否可以通过此列表中的变量将不同功能应用于嵌套列表?

来自分类Dev

为什么const std :: vector将const应用于包含的对象?

Related 相关文章

  1. 1

    将类型转换应用于列表:“ const”是否特殊?

  2. 2

    如何使用Fluent断言断言是否将转换器应用于类型

  3. 3

    将const调用应用于原始类型时,是否可以提高性能?

  4. 4

    在将“splitAt”应用于“List”之后,是否有任何简洁的方法可以将类型从“Int”转换为“Double”?

  5. 5

    是否将KnownTypeAttribute应用于对象类型?

  6. 6

    Haskell是否有用于创建将函数应用于列表的各种变体的函数

  7. 7

    是否可以将NSShadowAttribute应用于NSMutableArray或将NSMutableArray转换为NSMutableString?

  8. 8

    如何将条纹字体应用于特殊字符?

  9. 9

    如果列表不为空,则在scala或scalaz中是否存在将函数应用于列表的函数?

  10. 10

    是否将可选类型名应用于概念?

  11. 11

    无法将const应用于typedef引用

  12. 12

    如何将掩码应用于const void *地址?

  13. 13

    将sizeof()应用于const char * array []中的元素

  14. 14

    是否存在将单一转换应用于无限元素流的双重模式?

  15. 15

    是否有 Spark SQL Only 解决方案将强制转换应用于复杂列(map,struct)

  16. 16

    索引映射/过滤的无限列表是否将map / filter函数应用于索引之前的所有元素?

  17. 17

    是否有一个函数可以将 NumPy 的广播规则应用于形状列表并返回最终形状?

  18. 18

    是否可以将渐变应用于框阴影?

  19. 19

    是否可以将变化应用于ggvis中的属性

  20. 20

    如何知道是否将OrderBy应用于查询?

  21. 21

    是否有将属性应用于类的迭代方法?

  22. 22

    是否可以仅将setuid应用于特定用户?

  23. 23

    是否将ReceiveTimeout应用于隐藏的邮件

  24. 24

    是否可以将 CSS 样式应用于容器元素?

  25. 25

    是否可以将 RenderTransform 应用于实际的 UIElements?

  26. 26

    将条件应用于结构并产生结构类型的列表

  27. 27

    是否有可能仅将CSP应用于父框架,而不应用于任何iframe?

  28. 28

    是否可以通过此列表中的变量将不同功能应用于嵌套列表?

  29. 29

    为什么const std :: vector将const应用于包含的对象?

热门标签

归档