Resultados da pesquisa a pedido "language-lawyer"
Lambda genérico e seu argumento como expressão constante
O código a seguir é aceito pelo GCC 7.2 e clang 5.0.0, mas é rejeitado pelo Microsoft VS 2017 15.5.0 Preview 5 e pelo compilador Intel C ++ 19: struct S { }; constexpr int f(S) { return 0; } int main() { auto lambda = [](auto x) { constexpr int ...
Legalidade do uso da exclusão do operador em um ponteiro obtido do posicionamento new
Estou certo de que esse código deve ser ilegal, pois claramente não funcionará, mas parece ser permitido pelo C ++ 0x FCD. class X { /* ... */}; void* raw = malloc(sizeof (X)); X* p = new (raw) X(); // according to the standard, the RHS is a ...
Injeção de nome de classe e construtores
Recentemente, ao atualizar uma biblioteca para o Clang 5.x, notei um erro no meu código que havia sido compilado anteriormente no Clang 4.x, GCC 5.x-6.xe MSVC 2015 e 2017. #include <iostream> #include <typeinfo> #include <vector> int main() { ...
É um comportamento indefinido `reinterpret_cast` a` T * `a` T (*) [N] `?
Considere o seguinte cenário: std::array<int, 8> a; auto p = reinterpret_cast<int(*)[8]>(a.data()); (*p)[0] = 42;É istocomportamento indefinido? Eu acho que é. a.data() retorna umint*, que não é o mesmo queint(*)[8] oregras de alias de ...
Deduzindo o Primeiro Argumento do Modelo com Outros Parâmetros do Modelo Padrão
Gcc e clang parecem discordar se esse código deve ser compilado ou não: #include <type_traits> template <typename Signature, int N = 0> struct MyDelegate { }; template <typename D> struct signature_traits; template <template <typename> class ...
Argumento padrão vs sobrecargas em C ++
Por exemplo, em vez de void shared_ptr::reset() noexcept; template <typename Y> void shared_ptr::reset(Y* ptr);alguém pode pensar em template <typename Y = T> void shared_ptr::reset(Y* ptr = nullptr);Eu acho que a diferença de desempenho é ...
Aliasing struct e array da maneira C ++
Este é um acompanhamento de C ++ paraoutra pergunta minha [https://stackoverflow.com/q/48384399/3545273] Nos velhos tempos do pré-ISO C, o código a seguir não surpreenderia ninguém: struct Point { double x; double y; double z; }; double ...
O compilador pode explorar a otimização da base vazia se a classe contiver um membro da classe base?
Considerar struct base {}; struct child : base {};É sabido quesizeof(child) pode ser 1 pela aplicação dootimização de base vazia. Agora, no entanto, considere struct base {}; struct child : base {base b;};O compilador pode aplicar a otimização ...
Uso da palavra-chave typename com typedef e new
Considere este código, template<class T> struct Sample { typename T::X *x; //declare pointer to T's X };No código acima, a palavra-chavetypename é requerido pelo compilador, para que possa desambiguar entre tipos e valores aninhados em modelos. ...
… É um operador ou sintaxe?
eu ouvi... referido tanto como 'spreadsintaxe'e' a propagaçãooperador', sendo este último muito mais popular. O URL da empresa relevanteDocumentação ...