gpt4 book ai didi

c++ - 依赖基类中的常量使外部定义不匹配?

转载 作者:行者123 更新时间:2023-12-03 06:54:27 24 4
gpt4 key购买 nike

template<template<typename, size_t>class V, typename, size_t N>
struct X{
static constexpr size_t stride = N;
};

template<typename Num, size_t N>
struct Y;
template<typename Num>
struct Y<Num, 3> : protected X<Y, Num, 3>{
using X<Y, Num, 3>::stride;

Y<Num, stride> foo(Num angle, Y<Num, stride> axis) const;
};
我尝试为 foo 提供一个定义喜欢:
1.
template<typename Num>
Y<Num, 3> Y<Num, 3>::foo(Num angle, Y<Num, 3> axis) const{};

  • template<typename Num>
    Y<Num, Y<Num, 3>::stride> Y<Num, 3>::foo(Num angle, Y<Num, Y<Num, 3>::stride> axis) const{};

  • template<typename Num>
    Y<Num, X<Y, Num, 3>::stride> Y<Num, 3>::foo(Num angle, Y<Num, X<Y, Num, 3>::stride> axis) const{};
    但编译器(clang、msvc 和 gcc 7.5-)都不接受它们。 (为什么 gcc 8.1+ 有效?)
    但如果我定义 strideY喜欢 static constexpr size_t stride = X<Y, Num, 3>::stride , 1 2 工作。
    或者如果 X不是类模板,它们也能工作。
    什么原因?标准声明的错误还是编译器错误?以及如何在 using X::stride 工作情况?
    代码: https://godbolt.org/z/asn8rj .

    最佳答案

    不祥的是,这是CWG2 ,标准中缺乏规范,其申请日期实际上已被遗忘。也就是说,您的选项 #2 显然是正确的选择,因为它命名了与类中的声明相同的 using 声明。

    关于c++ - 依赖基类中的常量使外部定义不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64443239/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com