NGINX пытается перенаправить / переписать прямой URL-адрес на другой, но игнорирует аргументы, включающие & ldquo; # & rdquo;

«Универсальная ссылка» (стандартным термином является ссылка на пересылку ) является (по определению) ссылкой rval на параметр cv-unqualified template, то есть T&&.

Vector<Size, TypeT>&& является ссылкой на rvalue, а не ссылкой на пересылку.

Если вы хотите получить значение аргументов шаблона, напишите признак:

template<class> struct vector_traits;

template<template<int, class TypeT> class Vector, int Size, typename TypeT>
struct vector_traits<Vector<Size, TypeT>>{
    static constexpr int size = Size;
    using value_type = TypeT;
};

И проверьте std::decay_t<T>:

template<class T>
void foo(T&& t) {
    using TypeT = typename vector_traits<std::decay_t<T>>::value_type;
    // use TypeT.
}

Вы также можете переместить его в аргумент шаблона по умолчанию, что делает foo SFINAE-friendly (он удаляется из набора перегрузки, если std::decay_t<T> не является «вектором» "):

template<class T,
         class TypeT = typename vector_traits<std::decay_t<T>>::value_type>
void foo(T&& t) {
    // use TypeT.
}
1
задан Andy Parker 15 January 2019 в 16:48
поделиться