«language-lawyer» 태그된 질문

프로그래밍 언어 및 환경의 공식 또는 권위있는 사양의 복잡성에 대한 질문

2
람다에서 static_assert가있는 constexpr이 올바른 컴파일러는 무엇입니까?
static_assert에서 를 사용하려면 if constexpr일부 템플릿 매개 변수에 따라 조건을 만들어야합니다. 흥미롭게도 코드가 람다로 싸여 있으면 gcc와 clang이 동의하지 않습니다. 다음 코드는 gcc로 컴파일되지만 clang은 if constexprtrue 일 수 없더라도 assert를 트리거 합니다. #include <utility> template<typename T> constexpr std::false_type False; template<typename T> void foo() { auto f = [](auto x) …



1
Haskell에서 평가되는 함수에 대해 어떤 규칙이 있습니까?
제목에서 알 수 있듯이 Haskell 함수 반환 단위를 평가하려면 어떤 보증이 있습니까? 그러한 경우에는 어떤 종류의 평가도 실행할 필요가 없다고 생각할 것입니다. ()엄격한 요구가 명시되어 있지 않으면 컴파일러는 그러한 모든 호출을 즉시 값으로 바꿀 수 있습니다. 반품 ()또는 하단. 나는 GHCi에서 이것을 실험했고, 그 반대의 일, 즉 그러한 기능이 평가 …


4
부울이 아닌 반환 값과 동등 비교를 오버로드 할 때 C ++ 20의 변경 사항 또는 clang-trunk / gcc-trunk의 회귀가 변경됩니까?
다음 코드는 c ++ 17 모드에서 clang-trunk로 잘 컴파일되지만 c ++ 2a (다가오는 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{};} }; int main() { Meta res = …

1
GCC의 앵글 브래킷 구현에는 다음이 포함됩니다. 아래 설명 된 이유는 무엇입니까?
2.6 계산 포함 섹션 의이 문서 는 다음 단락으로 구성되어 있습니다. 행이 <토큰으로 시작하고> 토큰을 포함하는 토큰 스트림으로 확장되면 <와 첫 번째> 사이의 토큰이 결합되어 포함 할 파일 이름을 형성합니다. 토큰 사이의 공백은 단일 공백으로 줄어 듭니다. 초기 <뒤의 공백은 유지되지만 닫힘 앞의 후행 공백은 무시 됩니다. CPP는 꺾쇠 괄호 …
11 c++  c  gcc  language-lawyer 

1
컴파일러가 관련없는 인터페이스 유형으로 호출 될 때 클래스 유형 매개 변수를 사용하여이 일반 메소드를 선택하는 이유는 무엇입니까?
다음 두 클래스와 인터페이스를 고려하십시오. public class Class1 {} public class Class2 {} public interface Interface1 {} 왜 두 번째 호출 하는가 mandatory에 오버로드 된 메소드를 호출 Class2, 경우 getInterface1와 Interface1아무 관계가 없다 Class2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 …

2
`std :: declval <T>`에서 사용하기 위해 T는 완전한 타입이어야합니까?
이 예제를 고려하십시오 ( here ). #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; } 그것은 gcc9.2에 오류없이 …

2
C ++ 템플릿 템플릿 인수 유형 공제
문자열 컨테이너를 통해 패턴 일치를 찾아 인쇄하는 코드가 있습니다. 템플릿 화 된 foo 함수에서 인쇄가 수행됩니다. 코드 #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 Container&gt; void foo(Iterator first, Container&lt;std::pair&lt;Iterator, Iterator&gt;&gt; const &amp;findings) { for (auto const &amp;finding : findings) …

3
다른 컴파일러에서 C ++와 C 사이의 부호없는 비트 필드 정수 표현식이 일관되지 않음
편집 2 : 이전에 C ++ 소스 파일에 있던 함수가 C 파일로 그대로 이동하여 잘못된 결과를 반환하기 시작했을 때 이상한 테스트 실패를 디버깅했습니다. 아래의 MVE를 사용하면 GCC 문제를 재현 할 수 있습니다. 그러나 변덕스럽게 Clang (및 나중에 VS로)으로 예제를 컴파일하면 다른 결과를 얻었습니다! 컴파일러 중 하나에서 버그로 처리할지 또는 C …

1
char 값이 CHAR_MAX로 설정되어 CHAR_MIN으로 줄 바꿈이 보장됩니까?
내 코드 : #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); } 산출: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () 우리는로 char설정된 변수를 증가 CHAR_MAX시키면로 둘러싸임을 알 수 CHAR_MIN있습니다. 이 동작이 보장됩니까? 아니면 정의되지 않은 동작 또는 구현 지정 …

1
속성 기본값을 통해 관계를 변경하려고 할 때 예기치 않은 InvalidOperationException이 발생했습니다
아래 샘플 코드에서 수행 할 때 다음 예외가 발생합니다 db.Entry(a).Collection(x =&gt; x.S).IsModified = true. System.InvalidOperationException : '키 값이'{Id : 0} '인 다른 인스턴스가 이미 추적 중이므로'엔터티 유형 'B'의 인스턴스를 추적 할 수 없습니다. 기존 엔터티를 연결할 때는 지정된 키 값을 가진 엔터티 인스턴스가 하나만 연결되어 있는지 확인하십시오. B의 인스턴스를 첨부하는 …


1
왜 두 번째 impl을 추가하면 인수의 역 참조 강제가 방지됩니까?
impl Add&lt;char&gt; for String을 표준 라이브러리 에 추가하려고 할 때이 문제가 발생했습니다 . 그러나 운영자 shenanigans없이 쉽게 복제 할 수 있습니다. 우리는 이것으로 시작합니다 : 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); self …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.