Лязг двусмысленный колл (int, float, double)

Я должен скомпилировать API на Mac, используя Clang, который использует конструкцию, подобную этой:

#define TRUE 1

void func(int a) {
// ...
}

void func(double a) {
// ...
}

void func(float a) {
// ...
}

func(TRUE);

Clang жалуется, что звонок func() неоднозначно, в то время как MSVC и GCC нет. Есть ли вариант для Clang, что он выберет целочисленный вариант в этом случае?

Редактировать: это оригинальный вывод компиляции

../../resource/_api/c4d_basedocument.cpp:263:52: error: conversion from 'int' to 'const GeData' is ambiguous
this->SetParameter(DescLevel(DOCUMENT_USERCHANGE),TRUE,DESCFLAGS_SET_DONTCHECKMINMAX);
^~~~
../../resource/_api/ge_sys_math.h:21:15: note: expanded from macro 'TRUE'
#define TRUE    1
^
../../resource/_api/c4d_gedata.h:97:3: note: candidate constructor
GeData(double n)
^
../../resource/_api/c4d_gedata.h:110:3: note: candidate constructor
GeData(LONG n)
^
../../resource/_api/c4d_gedata.h:116:3: note: candidate constructor
GeData(SReal n)
^

LONG является интегральным типом, SReal тип с плавающей точкой.

1

Решение

У меня было время исследовать больше времени при изучении исходного проекта сборки и увидеть, что мне не хватает опции компилятора. Интересно, что это приводит только к дополнительному набору определений, который, кажется, решает «неоднозначность».

-include _api/ge_mac_flags.h

Который выглядит

#ifndef __GE_MAC_FLAGS__
#define __GE_MAC_FLAGS__

#define __MAC
#define __DEBUGGING__                                                                               // avoid conflicts with DebugAssert() definition for the Mac

#if __LP64__
#define __C4D_64BIT
#endif

#endif

Решает это!

0

Другие решения

Других решений пока нет …