Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Firestore does not build in Xcode 8.3.3 #1517

Closed
paulb777 opened this issue Jul 11, 2018 · 2 comments
Closed

Firestore does not build in Xcode 8.3.3 #1517

paulb777 opened this issue Jul 11, 2018 · 2 comments
Assignees
Milestone

Comments

@paulb777
Copy link
Member

@paulb777 paulb777 commented Jul 11, 2018

See https://stackoverflow.com/questions/51273189/no-such-module-firebasefirestore

/Users/paulbeusterien/pure/firebase-ios-sdk/Firestore/core/src/firebase/firestore/local/local_serializer.cc:133:12: error: no viable conversion from returned value of type 'unique_ptr<model::NoDocument>' to function return type 'unique_ptr<model::MaybeDocument>'
    return no_document;
           ^~~~~~~~~~~
In file included from /Users/paulbeusterien/pure/firebase-ios-sdk/Firestore/core/src/firebase/firestore/local/local_serializer.cc:17:
In file included from /Users/paulbeusterien/pure/firebase-ios-sdk/Firestore/Example/Pods/../../../Firestore/core/src/firebase/firestore/local/local_serializer.h:20:
/Applications/Xcode8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2565:29: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'std::unique_ptr<model::NoDocument>' to 'const std::__1::unique_ptr<firebase::firestore::model::MaybeDocument, std::__1::default_delete<firebase::firestore::model::MaybeDocument> > &' for 1st argument
class _LIBCPP_TYPE_VIS_ONLY unique_ptr
                            ^
/Applications/Xcode8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2594:49: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<model::NoDocument>' to 'nullptr_t' for 1st argument
    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR unique_ptr(nullptr_t) _NOEXCEPT
                                                ^
/Applications/Xcode8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2621:31: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<model::NoDocument>' to 'std::__1::unique_ptr<firebase::firestore::model::MaybeDocument, std::__1::default_delete<firebase::firestore::model::MaybeDocument> > &&' for 1st argument
    _LIBCPP_INLINE_VISIBILITY unique_ptr(unique_ptr&& __u) _NOEXCEPT
                              ^
/Applications/Xcode8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2625:9: note: candidate constructor [with _Up = firebase::firestore::model::NoDocument, _Ep = std::__1::default_delete<firebase::firestore::model::NoDocument>] not viable: no known conversion from 'std::unique_ptr<model::NoDocument>' to 'unique_ptr<firebase::firestore::model::NoDocument, std::__1::default_delete<firebase::firestore::model::NoDocument> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u,
        ^
/Applications/Xcode8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2640:35: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        _LIBCPP_INLINE_VISIBILITY unique_ptr(auto_ptr<_Up>&& __p,
                                  ^
/Users/paulbeusterien/pure/firebase-ios-sdk/Firestore/core/src/firebase/firestore/local/local_serializer.cc:135:12: error: no viable conversion from returned value of type 'unique_ptr<model::Document>' to function return type 'unique_ptr<model::MaybeDocument>'
    return document;
           ^~~~~~~~
In file included from /Users/paulbeusterien/pure/firebase-ios-sdk/Firestore/core/src/firebase/firestore/local/local_serializer.cc:17:
In file included from /Users/paulbeusterien/pure/firebase-ios-sdk/Firestore/Example/Pods/../../../Firestore/core/src/firebase/firestore/local/local_serializer.h:20:
/Applications/Xcode8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2565:29: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'std::unique_ptr<model::Document>' to 'const std::__1::unique_ptr<firebase::firestore::model::MaybeDocument, std::__1::default_delete<firebase::firestore::model::MaybeDocument> > &' for 1st argument
@wilhuff wilhuff self-assigned this Jul 11, 2018
@wilhuff
Copy link
Contributor

@wilhuff wilhuff commented Jul 11, 2018

Aha, the problem is that the assignment operator and copy constructors that allow conversion from a child type to a parent type are part of C++17 and are not available as part of C++11.

Xcode 8.3.3's libc++ does not have this feature yet and Xcode 9's libc++ does not flag it as C++17 only :-(. There does not appear to be a flag we can enable that would warn us of this usage.

@wilhuff
Copy link
Contributor

@wilhuff wilhuff commented Jul 11, 2018

Nope, that's not it.

The issue is that when returning instances of std::unique_ptr<Document> from a function declared to return std::unique_ptr<MaybeDocument> (a parent of Document) the compiler in Xcode 8.3.3 is not attempting to find a suitable move constructor.

This seems likely to be an instance of http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1579.

Note that in this case std::moveing the returned values clears up the error.

Fix incoming once I can get travis to verify this is broken for me.

@wilhuff wilhuff added this to the M30 milestone Jul 12, 2018
@wilhuff wilhuff closed this Jul 13, 2018
@firebase firebase locked and limited conversation to collaborators Oct 30, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants