Resultados da pesquisa a pedido "sfinae"
Por que minhas expressões SFINAE não funcionam mais com o GCC 8.2?
Recentemente, atualizei o GCC para 8.2 e a maioria das minhas expressões SFINAE parou de funcionar. O seguinte é um pouco simplificado, mas demonstra o problema: #include <iostream> #include <type_traits> class Class { public: template ...
Várias especializações de modelo de classe SFINAE usando void_t
As especializações de modelos de várias classes são válidas, quando cada uma é distinta apenas entre padrões que envolvem parâmetros de modelo em contextos não deduzidos? Um exemplo comum destd::void_t usa-o para definir uma característica que ...
Sobrecarga de resolução entre membros do modelo nas classes base e derivada
O compilador da Microsoft (Visual Studio 2017 15.2) rejeita o seguinte código: #include <type_traits> struct B { template<int n, std::enable_if_t<n == 0, int> = 0> void f() { } }; struct D : B { using B::f; template<int n, std::enable_if_t<n == ...
Por que a especialização de modelo não é escolhida?
Eu escrevi o seguinte código: #include <iostream> #include <string> #include <type_traits> template<typename, typename = void> struct is_incrementable : std::false_type {}; template<typename T> struct is_incrementable<T, decltype( ...
Sfinae fora de linha nas funções de membro do modelo é possível?
Demo [https://wandbox.org/permlink/ie6Naxo7GDzKOx89] A na declaração de classe de A :: foo. struct A { template <typename T> void foo(T a); };A :: foo agora é dividido por sfinae. template <typename T> typename std::enable_if<(sizeof(T) > 4), ...
Implementação C ++ 98/03 std :: is_constructible
Os componentes básicos da minha biblioteca de hobby precisam trabalhar com os compiladores C ++ 98 e C ++ 11. Para aprender e me divertir, criei as implementações C ++ 98 de vários tipos de funcionalidade de suporte (comoenable_if, conditional, ...
Usando std :: enable_if com parâmetros de tipo anônimo
Eu tento usarstd::enable_if com um parâmetro de tipo não utilizado e sem nome, para não distorcer oreturn tipo. No entanto, o código a seguir não compila. #include <iostream> template <typename T, typename ...
SFINAE para criar o modelo base sempre resulta em erro
Então, eu estou projetando uma espécie demy_numeric_cast função para limitar os tipos de conversões disponíveis ao usar uma estrutura que estou escrevendo. Foi bem simples fazer algo como template<typename To, typename From> constexpr To ...
Como resolver ambiguidade em funções sobrecarregadas usando SFINAE
Eu tenho uma biblioteca incrivelmente interessante que pode traduzir pontos: deve funcionar com qualquer tipo de ponto template<class T> auto translate_point(T &p, int x, int y) -> decltype(p.x, p.y, void()) { p.x += x; p.y += y; } ...
Por que as instanciações de modelo continuam aqui para sempre?
No código a seguir, quero substituir template <typename T, typename... Args> auto check (rank<1,T>, Args... args) const -> std::enable_if_t<!has_argument_type<T, Args...>(), decltype(check(rank<2, Ts...>{}, args...))> { return check(rank<2, ...