pmeerw's blog

24 Jun 2010

Thu, 24 Jun 2010

Playing with new C++ features in GCC 4.4

GNU C++ already provides some features of the upcoming c++0x standard which really make programming more convenient...

// compile with g++ -Wall -std=c++0x newcpp.cpp 
// taken from c't 2010/7
// see also http://gcc.gnu.org/projects/cxx0x.html

#include <vector>
#include <iostream>
#include <initializer_list>
#include <tuple>

struct X {
  // initializer list
  X(std::initializer_list<int> l) : data(new int[l.size()]) {
    std::copy(l.begin(), l.end(), data);
  }
  // disable copy constructor
  X(const X &o) = delete;
  // make explicit that we use the default assignment operator
  X& operator=(const X &o) = default;
  int *data;
};

/* not yet
constexpr int f() {
  return 42;
}
*/

int main() {
  // initializer lists
  std::vector<int> v = {1, 2, 3};
  X x({1, 2, 3});
  
  // auto type
  for (auto i = v.begin(); i != v.end(); i++) {
    std::cout << *i << std::endl;
  }

  /* not yet
  for (const auto i : {1, 2, 3}) cout << i << endl;
  */

  // enum with scope
  enum class Color {Red, Green, Blue};
  enum class Alert {Red, Yellow, Green};
  
  // enum with explicit type
  enum class Level : short {Low = 3, High = 8};
  
  /* not yet
  // null pointer
  int *a = nullptr;
  */
  
  // compile-time assert
  static_assert(sizeof(int *) == 4, "32bit pointers expected");
  
  // tuple (using variadic template parameters internally)
  std::tuple<int, int, int> y{1, 2, 3};
}

posted at: 11:01 | path: /programming | permanent link

Made with PyBlosxom