Googletest не принимает временный объект в EXPECT_THROW

У меня есть класс, в котором нет конструктора по умолчанию, но конструктор может выбросить. Я хотел провести тест вроде:

EXPECT_THROW(MyClass(param), std::runtime_error);

Но компилятор, g ++ , жалуется, что для MyClass нет конструктора по умолчанию. Однако следующее ...

EXPECT_THROW(MyClass foo(param), std::runtime_error);

... работает, и тест проходит должным образом. Почему же Googletest не принимает временный объект?

class MyClass
{
public:
  MyClass(std::string const& filename);
  //...
};

Интересно, что я провел рефакторинг моего теста, чтобы не указывать имя файла в отдельной переменной, и когда меня попросили проверить, я обнаружил следующие работы:

EXPECT_THROW(MyClass("somefilename"), std::runtime_error);

Однако следующее не соответствует 't:

std::string filename("somefilename");
EXPECT_THROW(MyClass(filename), std::runtime_error);
13
задан Fraser 7 February 2013 в 00:18
поделиться