ошибка компиляции common_type с некоторыми опциями компиляции

Контекст: Я играю с написанием шаблонов выражений и функций C ++ 11. Прикрепленный пример кода — просто эксперимент для развлечения. В этом варианте ET каждое выражение отслеживает свой собственный тип возвращаемого значения. common_type затем используется компилятором, чтобы найти, какие типы возвращаемых значений других выражений будут основаны на возвращаемых типах подвыражений.

Проблема: Вы можете увидеть полный пример Вот

У меня есть набор функций, которые динамически выясняют тип возвращаемого значения, используя common_type вот так:

template
<
typename... Args2,
typename T1,
template < typename... > class T2
>
Binary
<
T1,
T2< Args2... >,
typename common_type< T1 , typename select_last< Args2... >::type >::type
> const
operator*(T1 u, T2< Args2... > v)
{
cout << "Operator (value, expr)" << endl;
return Binary
<
T1,
T2< Args2... >,
typename common_type< T1 , typename select_last< Args2... >::type >::type
>(u, v);
}

Когда скомпилировано с
clang++ -std=c++11 -O3 -Wall -pedantic -Wextra main.cpp -lboost_iostreams -lz все отлично работает Когда скомпилировано с clang++ -stdlib=libc++ -std=c++11 -O3 -Wall -pedantic -Wextra main.cpp -lcxxrt -ldl -lboost_iostreams -lz Я получаю ошибки сборки, когда не примитивы передаются в common_type, (ака incompatible operand types ('Unary<int, int>' and 'int'))

Вопрос: Соответствует ли неправильная функция? Это похоже на common_type может оцениваться даже в неиспользуемых функциях. Есть ли простой способ отложить оценку common_type для двух операторов терминальных выражений?

0

Решение

Задача ещё не решена.

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector