[basic.link]/6 (내 emphasiss는) 블록 범위에서 선언 된 함수의 이름과 블록 범위 통근 선언 선언 변수 이름은 결합있다. ... static void f();
static int i = 0;
void g() {
extern void f(); // internal linkage
int i; // #2 i has no
C++ 표준은 표준 변환이 A standard conversion sequence is a sequence of standard conversions in the following order:
(1.1) — Zero or one conversion from the following set: lvalue-to-rvalue conversion, array-t
클래스 템플릿 전문화를 선호하는 규칙은 특수화를 함수 템플릿으로 다시 작성하고 함수 템플리트 [temp.class.order]에 대한 순서 지정 규칙을 통해보다 특수화 된 함수 템플릿을 결정하는 것과 관련됩니다. . 다음,이 예제를 고려하십시오 여기 #include <iostream>
template <class T> struct voider { usi
다른 답변을 작성할 때 investigating a stack trace discrepancy 동안 나는 이해하지 못하는 행동을 보았습니다. interface TestInterface <U> {
void test (U u);
}
static class Test <T extends Test<T>> implements TestInterface<T
DR 712은 현재 C++ 11의 [basic.def.odr]/2의 문구가 현재의 표현 인 [basic.def.odr]2 and 3으로 변경되었습니다. 재해 복구에 명시된 바와 같이 다음과 같이하지만 난 여전히, 변화에 대한 이유를 이해하려고 노력 중이 야 : "사용" (712)는 조건부 표현의 정수 상수 피연산자가 있습니까 클래스 정의 내에서 초기화 된
C++ 11의 정적 분석기에서 작업하고 있습니다. 클래스의 정적 const 멤버와 링크가 정의되어 있는지 여부가 확실하지 않은 상호 작용이 있습니다. 정적 분석기는이 구문이 정의되지 않은 경우에만 경고해야합니다. 파일 f1.cpp의 : 예이 하나 인 컴파일 clang++ -std=c++11 -Weverything f1.cpp f2.cpp 원인과 연결 str
다음 코드에서 어떤 생성자를 호출해야하며 그 이유는 무엇입니까? struct S
{
int i;
S() = default;
S(void *) : i{1} { ; }
};
S s{{}};
clang (트렁크에서)을 사용하면 두 번째 것이 호출됩니다. 두 번째 생성자가 주석 처리 된 경우 S{{}}이 여전히 유효한 표현이지
다음 코드는 Clang (4.0) 및 GCC (6.3)로 컴파일되지만 MSVC (Visual Studio 2015 Update 1, Visual Studio 2017)에서는 실패합니다. error C2219: syntax error: type qualifier must be after '*' 그러나, 다음 코드는 MSVC로 잘 컴파일 : using Cons