auto inferNothrow()
in
{
}
out
{
}
do
{
    return 1;
}
auto dontInferNothrowIn()
in
{
    throw new Exception(null);
}
do
{
    return 1;
}
auto dontInferNothrowOut()
out
{
    throw new Exception(null);
}
do
{
    return 1;
}
enum isNothrow(Attr...) = (Attr.length >= 1)
    && (Attr[0] == "nothrow" || isNothrow!(Attr[1 .. $]));
static assert(isNothrow!(__traits(getFunctionAttributes, inferNothrow)));
static assert(!isNothrow!(__traits(getFunctionAttributes, dontInferNothrowIn)));
static assert(!isNothrow!(__traits(getFunctionAttributes, dontInferNothrowOut)));