Articles of c ++ 14

Verifique as características de todos os argumentos de modelo variadic

Background: Eu criei a seguinte class C , cujo construtor deve ter N variables ​​do tipo B& : class A; class B { A* getA(); }; template class C { public: template inline C(Args&… args) : member{args.getA()…} {} private: std::array member; }; Problema: meu problema é como restringir os Args para serem todos do tipo […]

static_assert dependente do parâmetro de modelo não-tipo (comportamento diferente no gcc e clang)

template struct Hitchhiker { static_assert(sizeof(answer) != sizeof(answer), “Invalid answer”); }; template struct Hitchhiker {}; Ao tentar desativar a instanciação geral de modelo com static_assert , descobri que o código acima no clang gera o erro assert, mesmo quando o modelo não é instanciado, enquanto o gcc gera o erro assert apenas ao instanciar o Hitchhiker […]

Como o lambda genérico funciona em C ++ 14?

Como funciona o lambda genérico (palavra auto chave auto como um tipo de argumento) no padrão C ++ 14? É baseado em modelos C ++, onde cada compilador tipo de argumento gera uma nova function com o mesmo corpo, mas substituiu tipos (polymorphism em tempo de compilation) ou é mais semelhante aos genéricos de Java […]

O auto como parâmetro em uma function regular é uma extensão do GCC 4.9?

O gcc 4.9 permite o seguinte código, mas o gcc 4.8 e o clang 3.5.0 o rejeitam. void foo(auto c) { std::cout << c.c_str(); } Eu recebo warning: ISO C++ forbids use of ‘auto’ in parameter declaration [-Wpedantic] em 4.9, mas em 4.8 e clang recebo error: parameter declared ‘auto’ .

Diferenças entre std :: make_unique e std :: unique_ptr

O std::make_unique tem algum benefício de eficiência como o std::makes_shared ? Comparado com a construção manual de std::unique_ptr : std::make_unique(1); // vs std::unique_ptr(new int(1));

Inicialização agregada de C ++ 11 para classs com inicializadores de membro não estático

É permitido no padrão: struct A { int a = 3; int b = 3; }; A a{0,1}; // ??? Essa class ainda é agregada? clang aceita este código, mas o gcc não.

É uma extensão de compilador em conformidade para tratar funções de biblioteca padrão não-constexpr como constexpr?

gcc compila o seguinte código sem aviso: #include struct foo { static constexpr double a = std::cos(3.); static constexpr double c = std::exp(3.); static constexpr double d = std::log(3.); static constexpr double e1 = std::asin(1.); static constexpr double h = std::sqrt(.1); static constexpr double p = std::pow(1.3,-0.75); }; int main() { } Nenhuma das funções […]

O que são comparadores transparentes?

Em C ++ 14, containers associativos parecem ter mudado de C ++ 11 – [associative.reqmts] / 13 diz: Os modelos de function de membro find , count , lower_bound , upper_bound e equal_range não devem participar na resolução de sobrecarga, a menos que o tipo Compare::is_transparent exista. Qual é o propósito de tornar um comparador […]

Como implementar algoritmos clássicos de ordenação no moderno C ++?

O algoritmo std::sort (e seus primos std::partial_sort e std::nth_element ) da C ++ Standard Library é na maioria das implementações uma combinação complicada e híbrida de algoritmos de ordenação mais elementares , como sort sort, insertion sort, quick sort , merge sort, ou heap sort. Há muitas perguntas aqui e em sites irmãos, como https://codereview.stackexchange.com/, […]

Implementação C ++ 14 make_integer_sequence

Eu tentei implementar o modelo de alias de C ++ 14 make_integer_sequence , que simplifica a criação do modelo de class integer_sequence . template struct integer_sequence { typedef T value_type; static constexpr size_t size() noexcept { return sizeof…(I) ; } }; template using make_integer_sequence = integer_sequence; // only for illustration. Para implementar make_integer_sequence , precisamos […]