小编Вов*_*ова的帖子

gcc c ++ 11限制用户定义的常量和模板参数包

我一直在gcc 4.7.2中玩用户定义的常量,并遇到了一些我不太了解的大小限制因素.

我们的想法是为定点十进制类型定义一个constexpr运算符"".我想避免使用variadic模板从double进行转换,而是在编译时解析尾数和指数.尾数解析证明有点棘手.

当我启用下面代码底部的3条禁用行中的任何一行时,gcc会陷入无限循环并挂起.我注意到浮点文字的最大大小和可变参数模板的显式实例化,但整数文字的大小略大.

我用了命令:g ++ -std = c ++ 11 -Wall -g -o literal_value literal_value.cpp

使用-ftemplate-depth-128没有区别.

#include <iostream>
#include <cstdint>

typedef std::uint64_t value_type;

template<value_type Temp, char... List> struct literal_parser;

template<value_type Temp, char Head, char... List>
struct literal_parser<Temp, Head, List...>
{
    static const value_type value = Head == '.' ?
        literal_parser<Temp, List...>::value :
        literal_parser<Temp * 10 + Head - '0', List...>::value;
};

template<value_type Temp, char Last>
struct literal_parser<Temp, Last>
{
    static const value_type value = Last == '.' ?
        Temp …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 gcc4.7

13
推荐指数
1
解决办法
892
查看次数

标签 统计

c++ ×1

c++11 ×1

gcc4.7 ×1