首页 > 解决方案 > 错误:constexpr 成员变量之前缺少模板参数

问题描述

我查看了一些类似的问题,但没有找到任何适用于我的用例的解决方案。我有一个 constexpr 变量,我想用默认参数作为模板,但我似乎无法让它工作:

// Test.hpp
class Test
{
public:
    template <bool val = false>
    constexpr static bool MY_BOOL = val;
};

// Test.cpp
#include "Test.hpp"
#include <iostream>

int main()
{
    std::cout << Test::MY_BOOL << "\n";
    return 0;
}

g++ 编译器错误:

Test.cpp: In function ‘int main()’:
Test.cpp:6:29: error: missing template arguments before ‘&lt;<’ token
  std::cout << Test::MY_BOOL << "\n";

请让我知道我做错了什么/如果可以解决。谢谢!

标签: c++templates

解决方案


模板名称后面的模板参数列表只能用于函数模板。对于变量模板、类模板或别名模板,即使您不想提供任何显式参数,也至少需要空列表<>

要使用您的默认模板参数false

std::cout << Test::MY_BOOL<> << "\n";

推荐阅读