#include <stdio.h>
template <typename T>
class Template
{
public:
T a, b;
Template()
{
printf("constructor\n");
}
};
void main()
{
Template<void> test1;
}
Severity Code Description Project File Line Suppression State
Error C2182 'a': illegal use of type 'void' ConsoleApplication1 c:\users\ieuser\desktop\consoleapplication1\consoleapplication1.cpp 25
http://changmyeong.tistory.com/9
#include <queue>
using namespace std;
int main()
{
queue<void> a;
return 0;
}
Severity Code Description Project File Line Suppression State
Error C2182 'abstract declarator': illegal use of type 'void' ConsoleApplication1 c : \program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0 163
Error C2182 'abstract declarator': illegal use of type 'void' ConsoleApplication1 c : \program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0 165
Error C2182 'reference': illegal use of type 'void' ConsoleApplication1 c : \program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\deque 978
Error C2182 'const_reference': illegal use of type 'void' ConsoleApplication1 c : \program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\deque 979
Error C2070 'void': illegal sizeof operand ConsoleApplication1 c : \program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\deque 986
Error C2182 '_Val': illegal use of type 'void' ConsoleApplication1 c : \program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\deque 1003
#include <iostream>
using namespace std;
template<bool B, class T = void>
struct enable_if {};
class Foo {
public:
template <typename... Args, class T = void>
Foo(Args... args) {
cout << "Foo::Foo(args...)" << endl;
}
};
int main()
{
return 0;
}
이 방식은 컴파일이 가능하네요.
The void type comprises an empty set of values; it is an incomplete object type that cannot be completed.
C++ 표준에서는 void 타입 표현식이 존재할 수 있음을 명시하고, 그 사용처를 한정지어 주는군요.
C++11 std wrote:
The void type has an empty set of values. The void type is an incomplete type that cannot be completed. It is used as the return type for functions that do not return a value. Any expression can be explicitly converted to type cv void (5.4). An expression of type void shall be used only as an expression statement (6.2), as an operand of a comma expression (5.18), as a second or third operand of ?: (5.16), as the operand of typeid or decltype, as the expression in a return statement (6.6.3) for a function with the return type void, or as the operand of an explicit conversion to type cv void.
생각 외로 여러 군데서 쓰일 수 있긴 하지만, 여전히 void 타입의 지역변수를 만든다던가 할 수는 없습니다.
//.c 파일
#include <stdio.h>
void aa;
int main()
{
return 0;
}
Severity Code Description Project File Line Suppression State
Error (active) E0070 incomplete type is not allowed Project1 c:\Users\IEUser\Desktop\Project1\test.c 5
Error C2182 'aa': illegal use of type 'void' Project1 c:\users\ieuser\desktop\project1\test.c 5
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
컴파일 해보세요.
이 부분은 잘못된 내용 같네요. ㅇ_ㅇ;;
void(0); 는 컴파일이 됩니다.
void (C++)
https://msdn.microsoft.com/ko-kr/library/fxky5d0w.aspx
Void type
https://en.wikipedia.org/wiki/Void_type
C언어에서 (void *)0, (const void *)0, (void * const)0 세가지의 차이점
https://kldp.org/node/75306
상수(const)의 정의가 궁금합니다... void 는 형 지정자(type specifier) 1순위 입니다.
https://kldp.org/node/144933
변경자 데이터형 상수값
const int 10
const는 변경자(Modifier)이고. constant는 상수 입니다.
터보C 정복 책을 보면.
//403p 기억부류 지정자
//auto
//extern
//static
//register
//276p
//기본 연산자 primary operator ()[].->
//포인터 연산자 pointer operator * & ++ -- + - < <= > >= == != && || 등등 34가지
//전처리기 연산자 preprocessor operator # ## defined
//330p (void)형 함수를 앞에 붙이면. 리턴이 호출되지 않는다고 합니다. (viod)getch();
void 연산자'라고 하네요.
★ 1 패스 컴파일 - 터보C ★ 2 패스 컴파일 - 어셈블리 ★ 3 패스 컴파일 - MSVC
https://kldp.org/node/153220
1 패스 컴파일 - 터보C
2 패스 컴파일 - 어셈블리
3 패스 컴파일 - MSVC
오퍼레이트 연산자로 사용할 경우는 이렇습니다.
void operator
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/void
Functionality of void operator()()
http://stackoverflow.com/questions/11857150/functionality-of-void-operator
https://en.wikipedia.org/wiki/Variadic_template
https://en.wikipedia.org/wiki/Generic_programming
https://en.wikipedia.org/wiki/Partial_template_specialization
variadic template parameter로 인한 모호한 호출 c/c++
http://blog.naver.com/cmw1728/220724096915
--------------------------
아래는 그냥 구경하다가 적습니다.
--------------------------
[C++11] Variadic Templates
http://cafe.naver.com/multism/5506
Ellipses 및 Variadic 템플릿
https://msdn.microsoft.com/ko-kr/library/dn439779.aspx
Variadic 매크로
https://msdn.microsoft.com/ko-kr/library/ms177415.aspx
Variadic function
http://rosettacode.org/wiki/Variadic_function
[C++11] Variadic template
http://bunhere.tistory.com/408
[C++11] 간단하게 Non-static data member initializers, Variadic templates, Initializer lists, Alias templates 맛보기
http://jacking.tistory.com/1192
[C++11] variadic template C++11 / Programming
http://blog.naver.com/kjpark79/220158467318
[C++11] Variadic Template 사용법 C++
http://milennium9.blog.me/20192447791
[c++ 11] std::tuple과 variadic template의 활용
http://blog.naver.com/cmw1728/220656689814
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
단언컨대, 불가능합니다.
단언컨대, 불가능합니다.
그러라고 만든
void
가 아니기 때문이죠.C++ 표준에서는
void
타입 표현식이 존재할 수 있음을 명시하고, 그 사용처를 한정지어 주는군요.생각 외로 여러 군데서 쓰일 수 있긴 하지만, 여전히
void
타입의 지역변수를 만든다던가 할 수는 없습니다.C 에서 지역은 안되지만 전역으로는 선언할 수
C 에서 지역은 안되지만 전역으로는 선언할 수 있습니다.
Visual Studio Community 2017 에서는 오류가 발생합니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
정의와 선언은 구분하셔야지요
정의와 선언은 구분하셔야지요
댓글 달기