C++
- voluntas
- @ignis_fatuus
- ブン
- @Linda_pp
- 清楚なC++メイドBOT
- @tzik_tack
- 長谷川一輝
- wraith13
- @jj1bdx
- @cpp_akira
- 安藤敏彦
- @srz_zumix
- Siv3D
- @okdshin
- @hnokx
- @ishidakei
- @take_cheeze
- TAKEI Yuya
- @mumumu
- I (@wx257osn2)
- Tommy6
- わたやん
- @KorekaraSEDB
- @kariya_mitsuru
- @ciniml
- @beam2d
- @grafi_tt
- @nekketsuuu
- LouiS0616
- @volanja
- 大鎌広
- むてら
- ガチKGB
- 三重野賢人
x
19
1
template<typename T>
2
class Test
3
{
4
public:
5
static constexpr int sdm = T(nullptr);
6
static int f(void){static_assert(sizeof(T)==0);}
7
int g(void){static_assert(sizeof(T)==0);}
8
};
9
10
int main()
11
{
12
Test<int> intTest; //**It compiles! It's a declaration instead of a definition! Why?**
13
14
//the compiler would complain if adding one of these line.
15
intTest.f();
16
intTest.sdm;
17
intTest.g();
18
}
19
$ g++ prog.cc -Wall -Wextra -std=c++17 -pedantic
Start
prog.cc: In static member function 'static int Test<T>::f()': prog.cc:6:52: warning: no return statement in function returning non-void [-Wreturn-type] 6 | static int f(void){static_assert(sizeof(T)==0);} | ^ prog.cc: In member function 'int Test<T>::g()': prog.cc:7:45: warning: no return statement in function returning non-void [-Wreturn-type] 7 | int g(void){static_assert(sizeof(T)==0);} | ^ prog.cc: In instantiation of 'constexpr const int Test<int>::sdm': prog.cc:16:12: required from here prog.cc:5:32: error: cast from 'std::nullptr_t' to 'int' loses precision [-fpermissive] 5 | static constexpr int sdm = T(nullptr); | ^~~~~~~~~~ prog.cc: In function 'int main()': prog.cc:16:15: warning: statement has no effect [-Wunused-value] 16 | intTest.sdm; | ^ prog.cc: In instantiation of 'static int Test<T>::f() [with T = int]': prog.cc:15:14: required from here prog.cc:6:47: error: static assertion failed 6 | static int f(void){static_assert(sizeof(T)==0);} | ~~~~~~~~~^~~ prog.cc: In instantiation of 'int Test<T>::g() [with T = int]': prog.cc:17:14: required from here prog.cc:7:40: error: static assertion failed 7 | int g(void){static_assert(sizeof(T)==0);} | ~~~~~~~~~^~~
1
Finish