Resultados da pesquisa a pedido "language-lawyer"

2 a resposta

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 ...

4 a resposta

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 ...

1 a resposta

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() { ...

2 a resposta

É 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 ...

2 a resposta

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 ...

4 a resposta

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 é ...

4 a resposta

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 ...

4 a resposta

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 ...

3 a resposta

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. ...

2 a resposta

… É 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 ...