[C++] C++20: Concept
Concept์ ์ ๋๋ฆญ ๋งค๊ฐ๋ณ์ ํ์ ์ ์ ์ฝ์ฌํญ์ ๊ฑธ์ด์ค ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ธฐ์กด C++ ํ
ํ๋ฆฟ ๊ธฐ๋ฅ์ ์ธ์ฒด๊ณตํ์ ์ผ๋ก๋ ๋ง์ด ๋ถ์กฑํ๋ค.
๊ทธ๋์ ๋ค์ด๊ฐ์๋ ์๋๋ ํ์
์ด ๋ค์ด๊ฐ๋ฉด 5์ฒ์ค์ฉ๋๋ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ๋์ฐ๊ณค ํ์๋๋ฐ, ์ด ๊ธฐ๋ฅ์ผ๋ก ๊ทธ๋ฐ ๋ถํธํจ์ ์ข ๋์ด๋ผ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
Concept ์ ์ํ๊ธฐ
์ฐ์ ์ปจ์ ์ ํตํด ์ ์ฝ์ฌํญ์ ์ ์ํ๋ค.
์ปจ์ ์ ์ ์ ํ์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
template <ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์...>
concept ์ปจ์
๋ช
= boolean ์์ํํ์
์ฌ๊ธฐ์ ์ค๋ฅธ์ชฝ์ boolean์์ ์์๋ ์์ํํ์๋ง ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ sizeof๋ ์์๊ณ์ฐ์, TMP๋ฅผ ์ด์ฉํ ์ฒ๋ฆฌ ์ ๋๋ง ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ type_traits ํค๋๋ฅผ ์ธ ์ผ์ด ๋ง์์ง ๊ฒ์ด๋ค.
๋ง์ฝ ๋ถํธ์๋ ์ ์๋ง ๋ฐ๋ ์ปจ์ ์ ์ ์ํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
is_unsigned๋ type_trait์ ๋ถํธํ๋ณ๊ธฐ๋ฅ์ด๋ค.
requires๋ก ์ปจ์ ์ ์ฉํ๊ธฐ
๊ทธ๋ผ ์ด์ ์ ์ปจ์
์ ๊ฐ์ ธ๋ค๊ฐ ์ ์ฝ์ ๊ฑธ ์ ์๋ค.
์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๋ค.
ํ
ํ๋ฆฟ ์ ์ ๋ฐ๋ก ์ค๋ฅธํธ์ requires๋ก ์ปจ์
์ ๊ฑธ์ด์ ๊ฒ์ฆํ ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํด์ฃผ๋ฉด ๋์ด๋ค.

๊ทธ๋ผ ์ ์ฝ์ฌํญ์ ํด๋นํ๋ ๊ฒฝ์ฐ๋ ์ปดํ์ผ์ด ์ ๋์ง๋ง

์๋ ๊ฒฝ์ฐ์๋ ์ค๋ฅ๋ฅผ ๋ฑ๋๋ค.
