Perguntas com a marcação «language-lawyer»

Para perguntas sobre os meandros das especificações formais ou oficiais das linguagens e ambientes de programação.





4
Quebrar a mudança no C ++ 20 ou a regressão no clang-trunk / gcc-trunk ao sobrecarregar a comparação de igualdade com o valor de retorno não-booleano?
O código a seguir é compilado com clang-trunk no modo c ++ 17, mas é interrompido no modo c ++ 2a (próximo c ++ 20): // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} …


1
Por que o compilador escolhe esse método genérico com um parâmetro de tipo de classe quando chamado com um tipo de interface não relacionado?
Considere as duas classes e a interface a seguir: public class Class1 {} public class Class2 {} public interface Interface1 {} Por que a segunda chamada para mandatoryinvocar o método sobrecarregado com Class2, se getInterface1e Interface1não tem relacionamento Class2? public class Test { public static void main(String[] args) { Class1 …

2
T precisa ser um tipo completo para ser usado em `std :: declval <T>`?
Considere este exemplo (vindo daqui ): #include &lt;type_traits&gt; #include &lt;iostream&gt; template &lt;typename U&gt; struct A { }; struct B { template &lt;typename F = int&gt; A&lt;F&gt; f() { return A&lt;F&gt;{}; } using default_return_type = decltype(std::declval&lt;B&gt;().f()); }; int main() { B::default_return_type x{}; std::cout &lt;&lt; std::is_same&lt; B::default_return_type, A&lt;int&gt;&gt;::value; } Ele é compilado …

2
Dedução de tipos de argumento do modelo C ++
Eu tenho um código que localiza e imprime correspondências de um padrão como passando por cima do contêiner de strings. A impressão é realizada na função foo que é templated O código #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;tuple&gt; #include &lt;utility&gt; template&lt;typename Iterator, template&lt;typename&gt; class …

1
Um valor de char definido como CHAR_MAX é garantido para envolver CHAR_MIN?
Meu código: #include &lt;stdio.h&gt; #include &lt;limits.h&gt; int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Resultado: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Vemos que, quando incrementamos um charconjunto de variáveis ​​para CHAR_MAX, ele se volta para CHAR_MIN. Esse comportamento é garantido? Ou …


1
InvalidOperationException inesperado ao tentar alterar o relacionamento via valor padrão da propriedade
No código de exemplo abaixo, recebo a seguinte exceção ao fazer db.Entry(a).Collection(x =&gt; x.S).IsModified = true: System.InvalidOperationException: 'A instância do tipo de entidade' B 'não pode ser rastreada porque outra instância com o valor da chave' {Id: 0} 'já está sendo rastreada. Ao anexar entidades existentes, verifique se apenas uma …


1
Por que adicionar um segundo impl impede uma menor coerção do argumento?
Me deparei com esse problema ao tentar adicionar o impl Add&lt;char&gt; for Stringà biblioteca padrão. Mas podemos replicá-lo facilmente, sem travessuras de operador. Começamos com isso: trait MyAdd&lt;Rhs&gt; { fn add(self, rhs: Rhs) -&gt; Self; } impl MyAdd&lt;&amp;str&gt; for String { fn add(mut self, rhs: &amp;str) -&gt; Self { self.push_str(rhs); …

2
Construir exceções padrão com argumento de ponteiro nulo e pós-condições impossíveis
Considere o seguinte programa: #include&lt;stdexcept&gt; #include&lt;iostream&gt; int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&amp;) { std::cout &lt;&lt; "Caught!\n"; } } GCC e Clang com chamada libstdc ++ std::terminatee aborte o programa com a mensagem terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Clang …

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.