It might have to do with the difference between std::unique_ptr<FileReader> and std::unique_ptr<FileReaderInterface>, but I'd like to see the error message.
The compiler looks to be g++, what distribution are you using? Can you include the output from g++ --version? I don't see any issue with g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) for both 32 and 64-bit.
We generally recommend a more recent compiler. gcc 6+ or clang 7+ should work, as might a cast or reworking the function to return an output pointer.
A workaround with clang would be to explicitly move the return value: return std::move(file). You may also need to add -latomic to the link flags. This can be done with -DCMAKE_EXE_LINKER_FLAGS=-latomic.
This may actually be a bug since the return type differs from the variable and in C++11 this technically should be required. Let me check on the details.