接続数

COUNTER369283FROM 2012/5/16

MISRA-C diary(C言語日誌)

MISRA-C >> 記事詳細

2014/06/12

C++11,17 123456 (8a) 3 Basic concepts 3.1 Declarations and definitions

Tweet ThisSend to Facebook | by kaizen
// 1 filename:cpp2011-3-1a.cpp
// ver 0.1 June.12, 2014
//
// 2 original examples and/or notes:
// (c) ISO/IEC JTC1 SC22 WG21 N3242, April 12, 2011
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
// 3 Basic concepts 3.1 Declarations and definitions 
//
// 3 compile and output mechanism:
// (c) Ogawa Kiyoshi, kaizen@gifu-u.ac.jp,
//
// 4 compile errors and/or warnings:
// 4.1(c) Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
// Target: x86_64-apple-darwin13.2.0,  Thread model: posix
// Command/Options: c++ -std=c++11 -stdlib=libc++ -Wall cpp2011-3-1.cpp 
// (c) LLVM 2003-2009 University of Illinois at Urbana-Champaign.

// 4.2. g++-4.9 (GCC) 4.9.0 20131229 (experimental)
// Copyright (C) 2013 Free Software Foundation, Inc.
// This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// http://gcc.gnu.org/onlinedocs/gcc/Standards.html
// Command/Options: g++-4.9  -std=c++11  -Wall cpp2011-3-.cpp 
// g++-4.9: error: unrecognized command line option '-stdlib=libc++'
// Configuration:brew install gcc49
//
// 4.3. Visual Studio Express 2013, 
// (c) Microsoft http://www.visualstudio.com/
// SPEC:
// Windows 7, .NET Framework
// (c) VMware, Inc.
// VMWare fusion 6
//
// 5. Hardware:  MacBook Pro, 
//(c) Intel http://ark.intel.com/products/37006/
//Core 2 Duo 2.53GHz, 8GB, 1067MHz DDR3
//
// 6. Special Thanks: Upper organizatios and 
// ITSCJ/IPSJ http://www.itscj.ipsj.or.jp/itscj_english/index.html
// NPO SESSAME project, http://www.sessame.jp/workinggroup/WorkingGroup3/
// Toyo Corporation, http://www.toyo.co.jp/English/
// Japan Standard Association, http://bit.ly/1lzykg1
// NPO TOPPERS project, https://www.toppers.jp/asp-d-download.html
// Daido Universcity, http://www.daido-it.ac.jp/gakubugakka/computer/index.html
// WITZ Co.Ltd., http://www.witz-inc.co.jp/products/solution/solution.html
// SevenWise.co., http://www.7ws.co.jp/index.html
// TOYOTA Motor Corporation, http://toyota.jp/
// IT planning Inc., http://www.itpl.co.jp/en/index.html
// DENSO Corporation, http://www.globaldenso.com/en/
// Aisin Seiki co. Ltd., http://www.aisin.com/
// Spancion Inc., http://www.spansion.com/
// Yazaki Corporation, http://www.yazaki-group.com/global/
// Pananosic Corporation, http://www.panasonic.net/
// SWEST: Summer Workshop on Embedded System Technologies , http://swest.toppers.jp
// CEST: Consortium for Embedded System Technology, http://www.ertl.jp/CEST/
// JUSE: Union of Japanese Scientists and Engineers, http://www.juse.or.jp/e/
// OSC:Open Source Conference, http://www.ospn.jp/

#include <iostream>
#include <string>
//#include <cassert>

using namespace std;

// one of the following are definitions:
int a; // defines a
extern const int c = 1; // defines c
int f(int x) { return x+a; } // defines f and defines x
struct S { int a; int b; }; // defines S, S::a, and S::b
struct X { // defines X
int x; // defines non-static data member x
static int y; // declares static data member y
X(): x(0) { } // defines a constructor of X
};
int X::y = 1; // defines X::y
enum { up, down }; // defines up and down
namespace N { int d; } // defines N and N::d
namespace N1 = N; // defines N1
X anX; // defines anX
// these are just declarations:
extern int a; // declares a
extern const int c; // declares c
int f(int); // declares f
struct S; // declares S
typedef int Int; // declares Int
extern X anotherX; // declares anotherX
using N::d; // declares d

#include <string>
struct C {
std::string s; // std::string is the standard library class (Clause 21)
};

struct C2 {
std::string s;
C2() : s() { }
C2(const C& x): s(x.s) { }
C2(C&& x): s(static_cast<std::string&&>(x.s)) { }
// : s(std::move(x.s)) { }
C2& operator=(const C2& x) { s = x.s; return *this; }
C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }
// { s = std::move(x.s); return *this; }
~C2() { }
};


int main() {
a=2;
cout << a << c << f(c) <<  std::endl;
struct S s1;
struct X x1;
s1.a = 4;
s1.b = 5;
x1.x = 6;
x1.y = 7;
cout << s1.a << s1.b << x1.x << x1.y <<  std::endl;
C a1;
C b1 = a1;
  cout << &a1 << &b1 << std::endl;
b1 = a1;

return 0;
}
// output 
//213
//4567
//0x7fff5baa5aa00x7fff5baa5a88

-----

$ ../cppall.sh cpp2011-3-1a  

$ clang++ cpp2011-3-1a.cpp -std=c++03 -Wall

cpp2011-3-1a.cpp:97:5: warning: rvalue references are a C++11 extension [-Wc++11-extensions]

C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

    ^

cpp2011-3-1a.cpp:100:17: warning: rvalue references are a C++11 extension [-Wc++11-extensions]

C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                ^

cpp2011-3-1a.cpp:97:37: warning: rvalue references are a C++11 extension [-Wc++11-extensions]

C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

                                    ^

cpp2011-3-1a.cpp:100:52: warning: rvalue references are a C++11 extension [-Wc++11-extensions]

C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                                                   ^

4 warnings generated.

213

4567

0x7ffee38fd7000x7ffee38fd6e8

$ clang++ cpp2011-3-1a.cpp -std=c++11 -Wall

213

4567

0x7ffee183f7000x7ffee183f6e8

$ clang++ cpp2011-3-1a.cpp -std=c++17 -Wall

213

4567

0x7ffee2c8c7000x7ffee2c8c6e8


$ g++-7 cpp2011-3-1a.cpp -std=c++03  -Wall

cpp2011-3-1a.cpp:97:5:error: expected ',' or '...' before '&&' token

 C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

     ^~

cpp2011-3-1a.cpp:100:17:error: expected ',' or '...' before '&&' token

 C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                 ^~

cpp2011-3-1a.cpp: In constructor 'C2::C2(C)':

cpp2011-3-1a.cpp:97:37:error: expected '>' before '&&' token

 C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

                                     ^~

cpp2011-3-1a.cpp:97:37:error: expected '(' before '&&' token

cpp2011-3-1a.cpp:97:39:error: expected identifier before '>' token

 C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

                                       ^

cpp2011-3-1a.cpp:97:41:error: 'x' was not declared in this scope

 C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

                                         ^

cpp2011-3-1a.cpp:97:49:error: expected '{' at end of input

 C2(C&& x): s(static_cast<std::string&&>(x.s)) { }

                                                 ^

cpp2011-3-1a.cpp: In member function 'C2& C2::operator=(C2)':

cpp2011-3-1a.cpp:100:52:error: expected '>' before '&&' token

 C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                                                    ^~

cpp2011-3-1a.cpp:100:52:error: expected '(' before '&&' token

cpp2011-3-1a.cpp:100:54:error: expected identifier before '>' token

 C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                                                      ^

cpp2011-3-1a.cpp:100:56:error: 'x' was not declared in this scope

 C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                                                        ^

cpp2011-3-1a.cpp:100:60:error: expected ')' before ';' token

 C2& operator=(C2&& x) { s = static_cast<std::string&&>(x.s); return *this; }

                                                            ^


$ g++-7 cpp2011-3-1a.cpp -std=c++11  -Wall

213

4567

0x7ffee35d07200x7ffee35d0700


$ g++-7 cpp2011-3-1a.cpp -std=c++17  -Wall

213

4567

0x7ffeeef1f7200x7ffeeef1f700



<この稿は書きかけです。順次追記しています。>

C++N4606, 2016 Standard Working Draft on ISO/IEC 14882(1) sample coding list


C++N4606 2016 (8) 3 Basic concepts
3.1 Declarations and definitions [basic.def]
https://qiita.com/kaizen_nagoya/items/189e33eb8d2e923bbf43
p36



twitter:@kaizen_nagoya
09:38 | 投票する | 投票数(0) | コメント(0)