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

Ambiguity #2

Open
skaller opened this issue Sep 24, 2018 · 1 comment
Open

Ambiguity #2

skaller opened this issue Sep 24, 2018 · 1 comment

Comments

@skaller
Copy link

skaller commented Sep 24, 2018

I'm getting an ambiguity with clang. This is actually on a fork I made to prepare for
shared library visibility stuff:

 + /usr/bin/clang++ -c -std=c++14 -D_POSIX -w -fno-common -fvisibility=hidden 
-fno-strict-aliasing -fomit-frame-pointer -Ibuild/release/share/src/integer 
-DFLX_STATIC_LINK -Wfatal-errors -Wno-invalid-offsetof -Wno-parentheses -o build/release/obj/host/lib/rtl/flx_integer_static/build/release/share/src/integer/integer_static.o -MMD -MF /var/folders/km/g22y_d_j311d44xbkz5x4lww0000gn/T/tmp0tp6pja9/temp 
build/release/share/src/integer/integer.cpp
build/release/share/src/integer/integer.cpp:222:31: fatal error: conversion 
from 'const integer' to 'const integer::REP_SIZE_T' (aka 'const unsigned long')
 is ambiguous
    const integer::REP_SIZE_T max_bits = std::max(bits(), rhs.bits());
                              ^          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/release/share/src/integer/integer.include:159:9: note: candidate function
        operator bool()     const;
        ^
build/release/share/src/integer/integer.include:160:9: note: candidate function
        operator uint8_t()  const;
        ^
build/release/share/src/integer/integer.include:161:9: note: candidate function
        operator uint16_t() const;
        ^
build/release/share/src/integer/integer.include:162:9: note: candidate function
        operator uint32_t() const;
        ^
build/release/share/src/integer/integer.include:163:9: note: candidate function
        operator uint64_t() const;
        ^
build/release/share/src/integer/integer.include:164:9: note: candidate function
        operator int8_t()   const;
        ^
build/release/share/src/integer/integer.include:165:9: note: candidate function
        operator int16_t()  const;
        ^
build/release/share/src/integer/integer.include:166:9: note: candidate function
        operator int32_t()  const;
        ^
build/release/share/src/integer/integer.include:167:9: note: candidate function
        operator int64_t()  const;
        ^```
@skaller
Copy link
Author

skaller commented Sep 24, 2018

BTW: I think that should be REP_SIZE_T. If I change it though I get this:

build/release/share/src/integer/integer.cpp:381:31:
fatal error: conversion from 'integer' to 
'std::__1::deque<unsigned char, std::__1::allocator<unsigned char> >::size_type'
 (aka 'unsigned long') is ambiguous
        out.insert(out.end(), whole - 1, 0);

The issue is:

    const integer & whole      = qr.first;             // number of zeros to add to the back

and that really does have to be an integer (because one could be shifting a lot of bits).
Although I have no idea what would happen if you shifted more than uint64_t bits because
the underlying array would then be larger than memory on a 64 bit machine ....
So I guess a conversion from integer to REP_T is probably safe ..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant