diff --git a/src/input/FailingInputStream.hxx b/src/input/FailingInputStream.hxx
index c387d9751..ac8b6ffa7 100644
--- a/src/input/FailingInputStream.hxx
+++ b/src/input/FailingInputStream.hxx
@@ -33,10 +33,11 @@ class FailingInputStream final : public InputStream {
 	const std::exception_ptr error;
 
 public:
-	explicit FailingInputStream(const char *_uri,
+	template<typename U>
+	explicit FailingInputStream(U &&_uri,
 				    const std::exception_ptr _error,
 				    Mutex &_mutex) noexcept
-		:InputStream(_uri, _mutex), error(_error) {
+		:InputStream(std::forward<U>(_uri), _mutex), error(_error) {
 		SetReady();
 	}
 
diff --git a/src/input/InputStream.hxx b/src/input/InputStream.hxx
index f38f29981..9d03cd094 100644
--- a/src/input/InputStream.hxx
+++ b/src/input/InputStream.hxx
@@ -94,10 +94,11 @@ private:
 	std::string mime;
 
 public:
-	InputStream(const char *_uri, Mutex &_mutex) noexcept
-		:uri(_uri),
-		 mutex(_mutex) {
-		assert(_uri != nullptr);
+	template<typename U>
+	InputStream(U &&_uri, Mutex &_mutex) noexcept
+		:uri(std::forward<U>(_uri)),
+		 mutex(_mutex)
+	{
 	}
 
 	/**