相关疑难解决方法(0)

使用constexpr函数失败的模板实例化

我有一个模板类C,它具有类型的非类型但引用模板参数P:

class P {
public:
  int x;
  int y;
};

template <const P &x>
class C {
public:
  const int &f() { return x.x; }
};
Run Code Online (Sandbox Code Playgroud)

我声明了一个类型的全局变量P:

P p = {33,44};
Run Code Online (Sandbox Code Playgroud)

我还声明了一个返回引用的函数p:

constexpr const P &h() { return p; }
Run Code Online (Sandbox Code Playgroud)

然后尝试在下面使用这些:

C<p> o;    // line 1
C<h()> oo; // line 2
Run Code Online (Sandbox Code Playgroud)

当然我对第一次实例化没有问题,但第二次实例化没有问题.我的编译器抱怨:

error: non-type template argument does not refer to any declaration
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我无法在常规中找到反对它的论据.我不确定它是否与在默认模板参数调用constexpr完全相同的问题,其中讨论是关于嵌套 instanciation的实例化点.这是一个类型问题,但哪一个?我的函数h()返回对定义良好的类型(const …

c++ templates language-lawyer constexpr c++11

18
推荐指数
2
解决办法
1250
查看次数

标签 统计

c++ ×1

c++11 ×1

constexpr ×1

language-lawyer ×1

templates ×1