gcc-4.6.0 コンパイル通ったよ!

以下、テストコード:

#include <vector>
#include <memory> // for std::unique_ptr

// implicit move
struct X
{
  X() = default;
  
  X( std::vector<int> src )
    : p( new auto( std::move(src) ) ) {}
  
  // X( X&& ) = default;
  
  // noexcept-specification
  int* begin() noexcept(true) {
    return p ? p->data() : nullptr; // nullptr
  }
  int* end() noexcept(true) {
    return p ? ( p->data() + p->size() ) : nullptr;
  }
  
 private:
  std::unique_ptr<std::vector<int>> p;
  
};

#include <iostream>
#include <type_traits>

// constexpr
template<class T>
constexpr bool is_copyable( T&& ){
  return std::is_constructible<typename std::decay<T>::type, T&&>::value;
}

int main()
{
  X x = std::vector<int>{ 1, 2, 3 };
  // X y = x;  // ill-formed
  X y = std::move(x);
  // x = y; // ill-formed
  x = std::move(y);
  
  // constexpr, noexcept operator
  constexpr bool copyable = is_copyable(x);
  constexpr bool begin_throws = !noexcept( x.begin() );
  std::cout << std::boolalpha;
  std::cout << copyable << std::endl;     // false
  std::cout << begin_throws << std::endl; // false
  
  // range-based for
  for( auto const& i : x ){
    std::cout << i << std::endl;
  }
}

結果:

false
false
1
2
3

問題なし。