<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/110086>110086</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Inconsistent compilation behaviour between windows and ndk clang
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          sun-xm
      </td>
    </tr>
</table>

<pre>
    Below code can be compiled with windows clang but not ndk clang:

/////////////////////////////////////
typedef struct _AType* AType;

template<typename T>
struct Test
{
    T& operator[](size_t index)
    {
        return this->val[index];
 }

    // need to comment off below otherwise ambiguous operator[] error is reported in ndk
    operator AType() const
    {
 return this->atype;
    }

    operator T*()
    {
 return this->val;
    }

    AType atype;
    T val[10];
};

Test<int> t;
t[0]; // ambiguous operator[] error in ndk

Enviroment:
windows: win10 + vscode 1.93.1 + cmake 3.29.2 + clang 18.1.8
android: win10 + android studio 2024.1.1 Patch 1 + cmake 3.30.3 + ndk 27.1.12297006 (clang 18.0.2)

Error log in ndk:
C:\Users\xxx\AppData\Local\Android\Sdk\ndk\27.1.12297006\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi24 --sysroot=C:/Users/xxx/AppData/Local/Android/Sdk/ndk/27.1.12297006/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Dopencl_EXPORTS -I.../app/src/main/cpp/../../../../../../../../Modules/OCL/Source -I.../app/src/main/cpp/../../../../../../../../Source/Common -I.../app/src/main/cpp/../../../../../../../../Source/OpenCL.Jni -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security  -std=c++11 -fno-limit-debug-info  -fPIC -MD -MT CMakeFiles/opencl.dir/native-lib.cpp.o -MF CMakeFiles\opencl.dir\native-lib.cpp.o.d -o CMakeFiles/opencl.dir/native-lib.cpp.o -c .../app/src/main/cpp/native-lib.cpp

.../app/src/main/cpp/native-lib.cpp:95:6: error: use of overloaded operator '[]' is ambiguous (with operand types 'Test<int>' and 'int')
   95 |     t[0];
      | ~^~
.../app/src/main/cpp/native-lib.cpp:66:8: note: candidate function
 66 |     T& operator[](size_t index)
      | ^
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](struct _AType *, int)
   95 |     t[0];
      | ^
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](const struct _AType *, int)
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](volatile struct _AType *, int)
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](const volatile struct _AType *, int)
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](int *, int)
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](const int *, int)
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](volatile int *, int)
.../app/src/main/cpp/native-lib.cpp:95:6: note: built-in candidate operator[](const volatile int *, int)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV01v2zgT_jX0ZUBBpkx_HHywZQvIi-ZNkbro7imgpJHNjUQKJOU4e-hvX1CSHTk9pNmPtkFAyMOZ4fPMkJyhsFbuFeKS8DXhm5Fo3EGbpW0UPVWjVOfPyzWW-gkynSNkQkGKkOmqliXm8CTdAZ6kyvWThawUag9p40BpByp_7CQkWpFwQ8LzyJIf-t8u6p5rzLEA60yTOXhY7Z5rJGwF3Ue0HiJ0WNWlcEii2NspUSHsSLTtZnsXO7SuN5r11gAAO8KmoGs0wmnThZSwuZV_4oMDqXI8EbZ4Ub-y9X8GXWMUuIO0lETboygJX3d2fHPBCWS2GSJuXbV0QSHm4LRPUYXKgS4KSNsEandA8yQtgqhSuW90Y18hBTRGG5AWDNbaOMxBKp_Il1XOBn3g2JywBWRanYNxTeoVG-GGwe5Uv-FxWWFH2Kpb4Dtc-0C94bhFDN9i2EEX5XE4DLF3cL0t2oxHsVSORFtwl1lH-Lo3PSfhrQAPgtqNW3WURvuEXU5Lf6pItPIHbBwCYWs42vYYjoNFFIxbSVaJR4QoYIuAdYL2FI7nwTiYd56Eyo2W-bWnXgjWNbnUwEI2CcbBGD4Klx3g2ncUBlEr8GeazbweY4tZGE6BsPllwTBgl2T1tFq6pd6fKZ_Jxf6Lx58tGkt4fDqdCI9Xdb0RThAef9CZT0m86pHz-FP-SHis2vEKAeGx07rMDkIq76osjxXhcW0wbWTpCI_7QNLTfPownRAep1IRHnd3E1sTtg7whECpE2aPjkQbYarjjCqtkJZSNSfaBwtFKtkEKLXP1mjtVVsiLOmIsMQTYcmZCEs6Iiw5E2GJJ8IS1Y7XRFgyIMKSlghLLkRY8ooIS3oYQDe6RpWVD9vfPt7d7z4BvQmCgLBE1LVXMxlhSSWkIizJWlE7-x3Drc6bEj2cu_iDR68bk-G_57_zR1gS66rS6j9wfFejij8E_1MS6B7oZvX_zf3dzQZokQsnqMXMSa0s0KJoVPs9lDXKB506kZbof1snskdaG-0wc9pQ64xWe6BK00worWQmSlobLOTJ628ekrv73U3y-8Onu8_38ZZEGwa0EiY7XLaZAFq5Q1OlQL8U2lTCAf3S3hMk2nQCj6gx0j0DUOtyEm2ybuOOx0ALpWkpK-lojmmzp1IVGoAWH29ioLcboLc7iG_FIyayy2S3V4JcGr8RhZNHv83TIKvrQAO9TYbqPB6o8_i1epAD1e9yn8EbGb42Gd4m7zOMVgtOotXUX3t9OFfQWARdgD6iKbXIMX8pN4TNzvV65kvgyx1O2Lztc1pVlYOvIF46u6oI3szPEjbzAjYbFq4FBzKL2wo_KBfD0u-nvxK-_fr3uE49z7mnqLTvXFa-VctlLhzCeWP3y02nFyzv7FY6lIRv_2k-zhjbm41KNQD7LZphywZtTxBDG-H3hvcHA2-7IngT_o8Bc9SlcLLEXwVPF5xfDZVU7meH5KdCuOTjFwjEW1hG-TLKF9FCjHA5nrFZFE2jcD46LKfjbF6IIhzzCV_MuRAiyqKCpxyLYjYRbCSXvtsNF2wazqI5mwfZIuTTIoo4F2lehBMyCbESsgx8DxZosx9JaxtcjsdhOJ-OSpFiadsHM2N9G8n829ksvQFNm70lk7CU1tkXF066Epc3yrOT1vm3WfeMFv5uhhQP4ih1YyBF94SoLs9qX1Quj-lRY8rlwbnado0nYcleukOTBpmuXrrGFkdt9B-Y-c6xhe-Lc8_guGR_BQAA__9oy798">