我一直在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)