Fix some cases of C++11 exception specifications on constructors with =default or =delete

This commit is contained in:
William S Fulton 2013-11-22 00:12:33 +00:00
parent 97a9f5896a
commit fcd0480364
3 changed files with 19 additions and 2 deletions

View File

@ -69,4 +69,13 @@ struct moveonly {
moveonly& operator=(moveonly&&) = default;
~moveonly() = default;
};
struct ConstructorThrow {
ConstructorThrow() throw() = default;
ConstructorThrow(const ConstructorThrow&) throw() = delete;
ConstructorThrow(ConstructorThrow&&) throw() = delete;
ConstructorThrow& operator=(const ConstructorThrow&) throw() = delete;
~ConstructorThrow() throw() = default;
};
%}

View File

@ -37,8 +37,9 @@ struct NoExceptAbstract {
};
struct NoExceptDefaultDelete {
// NoExceptDefaultDelete() noexcept = default;
// NoExceptDefaultDelete(const NoExceptDefaultDelete&) noexcept = delete;
template<typename T> NoExceptDefaultDelete(T) noexcept = delete;
NoExceptDefaultDelete() noexcept = default;
NoExceptDefaultDelete(const NoExceptDefaultDelete&) noexcept = delete;
NoExceptDefaultDelete(NoExceptDefaultDelete&&) = delete;
NoExceptDefaultDelete& operator=(const NoExceptDefaultDelete&) = delete;
~NoExceptDefaultDelete() noexcept = default;

View File

@ -6780,6 +6780,13 @@ ctor_end : cpp_const ctor_initializer SEMI {
$$.throwf = 0;
$$.nexcept = 0;
}
| exception_specification EQUAL default_delete SEMI {
$$.have_parms = 0;
$$.defarg = $3.val;
$$.throws = $1.throws;
$$.throwf = $1.throwf;
$$.nexcept = $1.nexcept;
}
;
ctor_initializer : COLON mem_initializer_list