<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - std::integral_constant::operator ()() usage in std::tuple::get()"
   href="https://llvm.org/bugs/show_bug.cgi?id=24891">24891</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>std::integral_constant::operator ()() usage in std::tuple::get()
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>3.6
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++14
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>witosx@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=14917" name="attach_14917" title="c++14 source code ilustrating the problem">attachment 14917</a> <a href="attachment.cgi?id=14917&action=edit" title="c++14 source code ilustrating the problem">[details]</a></span>
c++14 source code ilustrating the problem

Clang will comply with "candidate template ignored: invalid
explicitly-specified argument for template parameter '__i'" when trying to
fetch tuple element with std::get when index is given by
std::integral_constant::operator()() called on lvalue/rvalue reference.

Attached stripped down example of source failing to compile. 

Full compilation error:

rafalw@montec-d3 ~/CODE % clang++ -c -std=c++14 integral_constant.cpp 
integral_constant.cpp:17:5: error: no matching function for call to 'get'
    std::get<i()>(tuple);
    ^~~~~~~~~~~~~
integral_constant.cpp:36:5: note: in instantiation of function template
specialization 'get_b<unsigned long, 1>' requested here
    get_b(I{});
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:147:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(std::pair<_Tp1, _Tp2>& __in) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:152:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(std::pair<_Tp1, _Tp2>&& __in) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:157:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(const std::pair<_Tp1, _Tp2>& __in) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:166:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Tp, _Up>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:171:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(const pair<_Tp, _Up>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:176:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Tp, _Up>&& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:181:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Up, _Tp>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:186:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(const pair<_Up, _Tp>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:191:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Up, _Tp>&& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/array:280:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(array<_Tp, _Nm>& __arr) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/array:289:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(array<_Tp, _Nm>&& __arr) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/array:297:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(const array<_Tp, _Nm>& __arr) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:832:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '__i'
    get(tuple<_Elements...>& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:838:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '__i'
    get(const tuple<_Elements...>& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:844:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '__i'
    get(tuple<_Elements...>&& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:867:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(tuple<_Types...>& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:873:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(tuple<_Types...>&& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:879:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(const tuple<_Types...>& __t) noexcept
    ^
integral_constant.cpp:25:5: error: no matching function for call to 'get'
    std::get<i()>(tuple);
    ^~~~~~~~~~~~~
integral_constant.cpp:39:5: note: in instantiation of function template
specialization 'get_c<unsigned long, 1>' requested here
    get_c(I{});
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:147:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(std::pair<_Tp1, _Tp2>& __in) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:152:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(std::pair<_Tp1, _Tp2>&& __in) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:157:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(const std::pair<_Tp1, _Tp2>& __in) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:166:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Tp, _Up>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:171:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(const pair<_Tp, _Up>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:176:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Tp, _Up>&& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:181:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Up, _Tp>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:186:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(const pair<_Up, _Tp>& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/utility:191:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(pair<_Up, _Tp>&& __p) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/array:280:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(array<_Tp, _Nm>& __arr) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/array:289:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(array<_Tp, _Nm>&& __arr) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/array:297:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Int'
    get(const array<_Tp, _Nm>& __arr) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:832:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '__i'
    get(tuple<_Elements...>& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:838:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '__i'
    get(const tuple<_Elements...>& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:844:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '__i'
    get(tuple<_Elements...>&& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:867:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(tuple<_Types...>& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:873:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(tuple<_Types...>&& __t) noexcept
    ^
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/tuple:879:5:
note: candidate template ignored:
      invalid explicitly-specified argument for template parameter '_Tp'
    get(const tuple<_Types...>& __t) noexcept
    ^
2 errors generated.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>