function<int(int)>)
                  
                  
                  ....
                  
                  
                  }
                  
                  
                  
                  
                  
                  насколько вероятно что в компайл тайм f эвалуируется?
                  
                  
                
в function<int(int)?
если Foo не constexpr то даже пытаться не будет хД
 Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  статик ассерт здесь чтобы Foo принимала только определенные сигнатуры
В данном коде - никогда
 Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  у меня почему то 14й стандарт но без констэкспр в студии
на такой случай enable if или концепты
это лучше в enable_if, но не прям важно
не уверен но на 14 стандарте наверное нельзя в constexpr ничего сложнее return a?b:c
 Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  а чем enable_if лучше?
ну если у тебя функция принимает всего один тип функций int int, то смысла в шаблоне вообще мало, а enable if чтобы можно было сделатьперегрузку
 Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  я хотел вообще изначально просто с function сделать, но потом захотел чтобы функтор передавался в компайл тайме как-то
Если потом этот Foo пытаться проверять "можно ли в него такую штуку передать", то он enable_if/requires увидит и скажет "нельзя", а вот static_assert внутри не увидит
 Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Концепты лучше, enable_if нет
в 99% случаев такие ассерты бесполезны т.к. если их не поставить выпадет ошибка компиляции просто другая(и скорее всего даже понятная)
 Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Pepe 🐸
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  выпадет непонятная
По static_assert failed можно грепать, его условие хорошо видно. enable_if выдает кучу срани вида no member type in blah или no viable overload
тем не менее через static assert не сделаешь перегрузки
Они нужны не всегда
для enable_if впилили костыли по моему в компиляторы, и там сообщение +- нормальное
согласен, но с enable_if анализатор ide сразу видит проблему и подчеркивает, что такой перегрузки не нашел. А с static_assert такая функция найдется всегда
Там все еще список кандидатов вываливается
Обсуждают сегодня