2016-12-07 12 views
-1

어떻게 주장 할 수 있습니까, 인수없이 인수 noexcept입니까? 감사.아무런 인수없이 인수 없음

+0

일반적으로 인수를 지정하지 않고 함수를 지정할 수 없습니다. 동일한 이름의 다중 오버로드가있을 수 있으며, 일부는 noexcept이고 다른 것은 오버플로가 될 수 있습니다.#INCLUDE –

답변

0

당신이 요구하는지 가정 :

가 어떻게 함수를 호출하지 않고 noexcept 것을 주장 할 수 있는가?

noexcept 지정자가 오버로드간에 다를 수 있기 때문에 대답을 할 수 없습니다. 예 :

int a(int) noexcept; 
int a(int, int); 

// What would `noexcept(a)` mean? 
+0

#INCLUDE 공극 FF() { } A 급 { 공개 noexcept : 공극 F() {noexcept FF(); } }; void g (A * obj, void (A :: * f)()) { static_assert (noexcept ((obj -> * f)), "kl"); } int main() { A a; 무효 : g (A, 예를 들어 &A::f); } –

+0

나는이 사용법 #include 사용법 #include 무효 FF() noexcept { } A 급 { 공공 잘못된 값을 반환 생각 F() { FF();} noexcept } 공극 g (A * OBJ, 공극 (A :: * F)()) { static_assert (noexcept ((obj -> * f)), "kl"); } int main() { A a; 이 주장이야 왜 g (A, &A::f); } ? –

+0

당신이 wandbox 또는하여 noexcept 지정자를 참고 @MartinAyvazyan? –

5

당신이 (가정에 대한 @VittorioRomeo 덕분에) 요구하고 가정 :

내가 함수를 호출하지 않고 noexcept라고 주장 할 수 있습니까

?

피연산자가 평가되지 않은 피연산자이기 때문에 noexcept 연산자를 사용할 수 있습니다. 다른 측면에서
,이 작업을 수행 할 수 있습니다

void f(int) noexcept { } 
void f(int, int) { } 

int main() { 
    static_assert(noexcept(f(0)), "!"); 
    static_assert(not noexcept(f(0, 0)), "!"); 
} 

f어떤 경우 호출되지 않습니다, 그는 평가되지 않은 피연산자의 (나 가정 해 봅시다) 성격입니다.

가장 흥미로운 부분은 변수로 인수를 사용할 필요가없고 변수를 구성하는 방법을 모르는 경우 std::declval과 결합 할 수 있다는 것입니다. 예를 들어
: 나는 그것이 기본 생성자가없는 경우에도, S를 구성 아무것도 통과하지 않아도

#include<utility> 

struct S { S(int) {} }; 

void f(S) noexcept { } 

int main() { 
    static_assert(noexcept(f(std::declval<S>())), "!"); 
} 

참고.

일반적으로 은 아무런 인수도 전달하지 않아도됩니다..